我正在尝试对特定数据集进行日常分析。该表如下所示:
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
我正在尝试使用Daily analysis
进行一些custNo
。如您所见,客户编号重复。一天是2013-01-31 1:00am
到2013-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 :(得分: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
答案 1 :(得分:0)
实际上,您应该能够按客户和日期进行分组,并为每个客户和日期选择最短访问时间:
SELECT custNo, MIN(visitTime)
FROM customer c
GROUP BY custNo, CONVERT(DATE, visitTime, 112)
ORDER BY custNo, MIN(visitTime)
答案 2 :(得分:0)
这是你要找的吗?
SELECT custno, min(visit)
FROM visitors
GROUP BY custno, CONVERT(DATE, VISIT)
ORDER BY custno, min(visit)