MYSQL计算行和组之间的时间作为 session

标签 mysql datetime

我的数据是这样的;

datetime
2014-12-28 07:26:29
2014-12-28 07:25:29
2014-12-28 07:24:29
2014-12-28 07:23:30
2014-12-28 07:22:29
2014-12-28 00:19:49
2014-12-27 22:24:52 * end
2014-12-27 22:23:52
2014-12-27 22:22:52
2014-12-27 22:21:52
2014-12-27 22:20:52 * start

我希望输出是这样的;

datetime_start         datetime_end             duration_in_mins
2014-12-28 07:22:29    2014-12-28 07:26:29      4
2014-12-28 00:19:49    2014-12-28 00:19:49      1
2014-12-27 22:20:52    2014-12-27 22:24:52      4

因此,如果下一行比另一行晚 1 分钟,它仍被视为同一 session 的一部分。有任何想法吗?

最佳答案

这可能不完全正确,但按照这些思路应该可以工作......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(datetime DATETIME NOT NULL PRIMARY KEY);


INSERT INTO my_table VALUES
('2014-12-28 07:26:29'),
('2014-12-28 07:25:29'),
('2014-12-28 07:24:29'),
('2014-12-28 07:23:30'),
('2014-12-28 07:22:29'),
('2014-12-28 00:19:49'),
('2014-12-27 22:24:52'),
('2014-12-27 22:23:52'),
('2014-12-27 22:22:52'),
('2014-12-27 22:21:52'),
('2014-12-27 22:20:52');

SELECT MIN(a.datetime) start
     , MAX(a.datetime) end
     , TIMEDIFF(MAX(a.datetime)+INTERVAL 1 MINUTE,MIN(a.datetime)) diff
  FROM
     ( SELECT x.* 
     , MAX(y.datetime) a
     , MAX(y.datetime) < x.datetime - INTERVAL 1 MINUTE session
  FROM my_table x 
  JOIN my_table y 
    ON y.datetime < x.datetime 
 GROUP
    BY x.datetime
     ) a
  JOIN (SELECT @session := 1) vars
GROUP BY CASE WHEN session = 1 THEN @session := @session + 1 ELSE @session := @session END;

+---------------------+---------------------+----------+
| start               | end                 | diff     |
+---------------------+---------------------+----------+
| 2014-12-27 22:21:52 | 2014-12-27 22:24:52 | 00:04:00 |
| 2014-12-28 00:19:49 | 2014-12-28 00:19:49 | 00:01:00 |
| 2014-12-28 07:22:29 | 2014-12-28 07:22:29 | 00:01:00 |
| 2014-12-28 07:23:30 | 2014-12-28 07:26:29 | 00:03:59 |
+---------------------+---------------------+----------+

关于MYSQL计算行和组之间的时间作为 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732314/

相关文章:

python - 使用 pandas 格式化不一致的日期数据

mysql - 如何将 mysql 日期时间列转换为日期?

mysql - 按时间分组,但不使用特定的表列?

未为用户分类的 mysql 查询对象

PHP从文本中提取数据

mysql - 为什么有索引的 MySQL 查询速度很慢?

postgresql - 选择两个时间戳之间的记录

java - 基于Java中的国家/地区代码(如DE,IT,ES,IE,IE,PT,UK)的当前日期和时间

datetime - 将 Go 时间从 UnixDate 转换为 RFC3339 无法保留时区

mysql - 多个日期时间的mysql SUM问题