2013-08-20 27 views
0

我正在尝试对特定的一组数据进行日常分析。该表是这样的:试图获得第一次访问日期

custNo visitTime   FirstVisit 

1234 2013-01-31 20:15 
1234 2013-01-31 22:30 
1234 2013-02-15 02:30 
1234 2013-02-15 06:30 
1234 2013-02-15 11:30 
1234 2013-02-15 21:30 

我试图做使用custNo一些Daily analysis。正如您在上面看到的那样,客户号码重复出现。有一天是2013-01-31 1:00am2013-02-01 00:59am。我正试图想出FirstVistTime的查询。因此,对于31st Jan,应该是2013-01-31 20:15,对于15th Feb应该是2013-02-15 02:30

到目前为止,我想出了这个查询:

select custNo, visitTime, FirstVisit=(select MIN(c.visitTime) FROM customer c where 
(c.custNo=ct.custNo and c.visitTime >= '01/01/2013 01:00' and c.visitTime < '03/01/2013 
01:00') 
from customer ct 
where visitTime >= '01/01/2013 01:00' 
    and visitTime < '03/01/2013 01:00' 

这样做的问题是 - 如果custNo重复它需要所有行考虑并计算最小日期,这在上述情况下将2013-01-31 20:15。我试图用min(visitTime)over(partition by custNo,visitTime)。那么这是一个返回两个值的subquery

回答

0

其实,你应该只能够按客户和日期,并为每个客户和日期最小访问时间:

SELECT custNo, MIN(visitTime) 
FROM customer c 
GROUP BY custNo, CONVERT(DATE, visitTime, 112) 
ORDER BY custNo, MIN(visitTime) 
0

这是你在找什么?

SELECT custno, min(visit) 
FROM visitors 
GROUP BY custno, CONVERT(DATE, VISIT) 
ORDER BY custno, min(visit) 

这里是一个SQLFiddle

1

试试这个:

select custNo, min(visitTime) from customer 
group by custNo, CAST(visitTime AS date) 
order by custNo 

或:

select t1.custNo, t1.visitTime, t2.minVal 
from customer t1 left join 
(
    select custno, min(visitTime) as minVal from customer 
    group by custno, CAST(visitTime AS date)  
) t2 on t1.custNo = t2.custNo and CAST(t2.minVal as date) = CAST(t1.visitTime as date) 
order by t1.custNo 
相关问题