mysql - 将 2 个 varchar 值之间的一组行分组

标签 mysql

我有以下 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/

相关文章:

php - 如何使用 PHP 和 CSS 在选择下拉菜单中缩进文本? [释义]

mysql - 如何在sql中使用password()?

XAMPP 控制面板中 MYSQL 意外关闭

php - 在 PHP 中填充多维数组

PHP生成多个字符串并插入数据库

php - 如何在使用 mySQLi 的 SQL 查询中使用带有表对象的 $result 变量

MySQL 按两列日期作为范围进行分组

java - 使用 JPA 为 Wildfly 构建 Java Web 应用程序失败?

java.sql.SQLException : No suitable driver found for localhost/buddhiedgeserver_db 异常

mysql - 如何在 MySQL 中将 BLOB 转换为 DOUBLE