繁体   English   中英

从不同的行和不同的日期获取日期的最小和最大时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM