[英]get min and max time of date from different rows and for different dates
我有以下表格StudentEntryDetails
:
Id StudId CheckTime CheckType
1 1 2015 - 01 - 08 09: 00: 00.000 IN
2 1 2015 - 01 - 08 11: 00: 00.000 OUT
3 1 2015 - 01 - 08 13: 00: 00.000 IN
4 1 2015 - 01 - 08 19: 00: 00.000 OUT
5 1 2015 - 01 - 09 08: 00: 00.000 IN
6 1 2015 - 01 - 09 12: 00: 00.000 OUT
7 1 2015 - 01 - 09 13: 00: 00.000 IN
8 1 2015 - 01 - 09 14: 00: 00.000 OUT
9 1 2015 - 01 - 10 08: 00: 00.000 IN
10 1 2015 - 01 - 10 15: 00: 00.000 OUT
11 2 2015 - 01 - 08 10: 00: 00.000 IN
12 2 2015 - 01 - 08 13: 00: 00.000 OUT
13 2 2015 - 01 - 13 07: 00: 00.000 IN
14 2 2015 - 01 - 13 13: 00: 00.000 OUT
15 2 2015 - 01 - 13 14: 00: 00.000 IN
16 2 2015 - 01 - 13 17: 00: 00.000 OUT
17 3 2015 - 01 - 09 12: 00: 00.000 IN
18 3 2015 - 01 - 09 14: 00: 00.000 OUT
我想要在同一行的表中的每个日期和每个用户的最小和最大时间,我编写了以下代码
select StudId, Convert(date,CheckTime),
CheckInTime=min(case when CheckType='IN' then CheckTime end),
CheckOutTime=max(case when CheckType='OUT' then CheckTime end)
from StudentEntryDetails group by StudId,CheckTime
但结果不正确。 我想要以下结果。
StudId Date CheckInTime CheckOutTime
1 2015-01-08 2015-01-08 09:00:00.000 2015-01-08 19:00:00.000
1 2015-01-09 2015-01-09 08:00:00.000 2015-01-09 14:00:00.000
1 2015-01-10 2015-01-10 08:00:00.000 2015-01-10 15:00:00.000
3 2015-01-09 2015-01-09 12:00:00.000 2015-01-09 14:00:00.000
2 2015-01-08 2015-01-08 10:00:00.000 2015-01-08 13:00:00.000
2 2015-01-13 2015-01-13 07:00:00.000 2015-01-13 17:00:00.000
您需要GROUP BY StudId,Convert(date,CheckTime)
。 像这样
SELECT StudId, CONVERT(DATE,CheckTime),
CheckInTime = MIN(CASE WHEN CheckType='IN' THEN CheckTime END),
CheckOutTime = MAX(CASE WHEN CheckType='OUT' THEN CheckTime END)
FROM StudentEntryDetails
GROUP BY StudId,CONVERT(DATE,CheckTime)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.