如何在 SQL 中的同一列下配对日期?
表格如下所示:
id | user | type | date
---+------------+-------------+-------------
1 | 1 | login | 2014-03-19 15:41:52
2 | 1 | login | 2014-03-19 19:41:52
3 | 1 | logout | 2014-03-19 21:41:52
4 | 2 | login | 2014-03-20 19:41:52
5 | 2 | logout | 2014-03-20 20:41:52
6 | 3 | login | 2014-03-21 19:41:52
7 | 4 | login | 2014-03-21 19:42:52
8 | 4 | logout | 2014-03-21 21:41:52
10 | 5 | login | 2014-03-19 21:45:52
11 | 5 | login | 2014-03-19 21:46:52
12 | 3 | logout | 2014-03-19 21:51:52
13 | 5 | logout | 2014-03-19 22:41:52
目的是将一次登录与一次注销配对。
在此示例中,用户 1 有 2 次登录和 1 次注销。
应忽略首次登录,最近一次登录应与最小注销配对:即配对登录 id=2 和注销 id=3
最佳答案
这样的方法可能有效,并且应该返回表中的所有组合,但随着表填满,性能可能会变得更差。为了获得更好的性能,请考虑将唯一生成的 SessionId 添加到表中,这对于登录和注销都是相同的。
SELECT t1.user, t1.date loginDate, t2.date LogoutDate
FROM table t1
LEFT JOIN table t2
ON t1.user = t2.user AND t1.type = 'login' and t2.type = 'logout' AND t1.Date < t2.Date
LEFT JOIN table t3
ON t3.user = t1.user AND t3.type = 'login' and t3.date < t2.date
WHERE t3.id IS NULL
关于mysql - 在我的sql中同一列下配对日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22895640/