ここで質問、
attendance
私は4列で呼ばれるテーブルを持っています:
[Username] varchar(256)
[Date] varchar(256)
[Time] varchar(256)
[Action] varchar(256)
私が達成したいのは、最初のチェックインとチェックアウトの時間と最後のチェックインとチェックアウトの時間を取得することです。テーブルにチェックインとチェックアウトの行が 1 つしかない場合は、同じものを返します。
次のようなサンプル データ:
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に問題はありますか?
誰でも提案できますか?