查询Mysql以选择1列,但有2种不同的类型数据

时间:2018-01-25 05:20:40

标签: mysql

我有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

任何人都可以帮我吗?

1 个答案:

答案 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在评论中提出的那样管理每个用户会话的登录和注销时间。