这里的问题,
我有一个名为attendance
4 列的表:
[Username] varchar(256)
[Date] varchar(256)
[Time] varchar(256)
[Action] varchar(256)
我希望实现的是获得第一次入住和退房时间和最后一次入住和退房时间。如果表中只有一个签入和签出行,则返回相同。
样例数据如下:
Username | Date | Time | Action
--------------------------------------------
User1 | 01/12/2012 | 12:54:41 | Check In
User1 | 01/12/2012 | 18:26:36 | Check Out
User1 | 01/12/2012 | 18:44:17 | Check In
User1 | 01/12/2012 | 22:05:31 | Check Out
我的预期结果如下所示:
Output:
Username | Date | First In | First Out | Last In | Last Out
User1 | 01/12/2012 | 12:54:41 | 18:26:36 | 18:44:17 | 22:05:31
我试过这个 SQL 语句:
SELECT [USERNAME], [DATE]
, min(case when [action] = 'Clock In' then [time] else '' end) as 'First in'
, min(case when [action] = 'Clock Out' then [time] else '' end )as 'First out'
, max(case when [action] = 'Clock In' then [time] else '' end) as 'Last in'
, max(case when [action] = 'Clock Out' then [time] else '' end )as 'Last out'
FROM attendance
WHERE [USERNAME] = 'User1' AND [DATE] = '01/12/2012'
group by [username],[date]
它返回意外结果,即我的最小值始终为“”或为空,但我的最大值“后进”和“后出”均处于正确值。
Output:
Username | Date | First In | First Out | Last In | Last Out
User1 | 01/12/2012 | | | 18:44:17 | 22:05:31
我的 SQL 有什么问题吗?
任何人都可以提出任何建议吗?