I have a table in sql in following format
Userid Status Logtime 1 In 10:10 1 In 10:12 2 In 10:14 3 In 10:16 3 Out 10:18 1 Out 10:20 4 In 10:22 2 Out 10:24
Output required
Userid Status In_time Out_time 1 out 10:20 2 In 10:14 10:24 3 In 10:16 10:18 4 In 10:22
Advertisement
Answer
In_Time
should be the first instead of the last status.
Then your result should be instead
Userid IN_TIME OUT_TIME
1 10:10 10:20 2 10:14 10:24 3 10:16 10:18 4 10:22 NULL
Code like below, live demo here
SELECT Userid, MIN(CASE WHEN sStatus = 'IN' THEN Logtime ELSE NULL END) AS IN_TIME, MAX(CASE WHEN sStatus = 'Out' THEN Logtime ELSE NULL END) OUT_TIME FROM TblInOut GROUP BY Userid
Updated
If you want to get the last status for In_Time
, just adjust slightly condition from Min
to Max
like below, live demo here
SELECT Userid, MAX(CASE WHEN sStatus = 'IN' THEN Logtime ELSE NULL END) AS IN_TIME, MAX(CASE WHEN sStatus = 'Out' THEN Logtime ELSE NULL END) OUT_TIME FROM TblInOut GROUP BY Userid
Output
Userid IN_TIME OUT_TIME 1 10:12 10:20 2 10:14 10:24 3 10:16 10:18 4 10:22 NULL