我有以下 MySQL 表
1 id mediumint(9)
2 user_id mediumint(9)
3 location_id mediumint(9)
4 timestamp timestamp
5 activity varchar(100)
6 points mediumint(9)
我想查询 user_id、location_id、日期、SUM(points) 之间(分组依据)2 个不同的事件(登记和结帐),但我不知道如何做。 应允许 checkin 和 checkout 之间的任何事件。
1 38 13 2015-05-13 13:26:01 checkin 100
2 38 13 2015-05-13 13:26:07 add_points 5
3 38 13 2015-05-13 13:26:13 add_points 5
4 38 13 2015-05-13 13:26:19 add_points 5
5 38 13 2015-05-13 13:26:26 add_points 5
6 38 13 2015-05-13 13:26:31 add_points 5
7 38 13 2015-05-13 13:26:37 add_points 5
8 38 13 2015-05-13 13:33:42 checkout 0
这个集合的结果应该是:
userid location date sum of points between checkin and checkout
38 13 2015-05-13 130
当checkin和checkout较多时,结果应该再增加一行。
最佳答案
http://sqlfiddle.com/#!9/ba90b/2
SELECT t.*,
SUM(t.points)
FROM (
SELECT *,
IF(activity='checkin', @gr:=CONCAT(user_id,`timestamp`), @gr) gr,
IF(activity='checkout', @gr:=null, @gr)
FROM table1
ORDER BY user_id,`timestamp`) t
GROUP BY t.gr
关于mysql - 将 2 个 varchar 值之间的一组行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30216241/