我有1张这样的表
id|Date |Username|TimeLogin|Type
1 |2018-01-22|tester1 |07:00 |Login
2 |2018-01-22|tester1 |22:00 |Logout
3 |2018-01-22|user2 |08:00 |Login
4 |2018-01-22|user2 |18:00 |Logout
我希望结果如下:将Type
Login
作为一列,将Logout
条目放入结果中的另一列。
username|logintime|logouttime|date
tester1 |07:00 |22:00 |2018-01-22
user2 |08:00 |18:00 |2018-01-22
我尝试此查询,但结果不正确
SELECT
username,
CASE WHEN type = 'Login' THEN
timeLogin
END AS 'loginTime',
CASE WHEN type = 'Logout' THEN
timeLogin
END AS 'logoutTime',
Date
FROM
sys_transaksi
WHERE
Date = '2018-01-22'
GROUP BY username
任何人都可以帮我吗?
答案 0 :(得分:1)
您可以通过执行内部联接来获得接近预期结果的内容,如下所示:
SELECT A.username, A.timeLogin `loginTime`, B.timeLogin `logoutTime`, A.date
FROM
(SELECT username, `date`, max(timeLogin) timeLogin
FROM sys_transaksi WHERE type='login' AND `date`='2018-01-22'
GROUP BY username, `date`) A
LEFT JOIN
(SELECT username, `date`, max(timeLogin) timeLogin
FROM sys_transaksi WHERE type='logout' AND `date`='2018-01-22'
GROUP BY username, `date`) B
ON A.username=B.username AND A.timeLogin<B.timeLogin;
这给出了每个用户在指定日期的最新登录和注销时间。最好修改表的结构,以便像@FrankerZ在评论中提出的那样管理每个用户会话的登录和注销时间。