mysql - 如果日期在相邻小时内,则合并日期

标签 mysql

我有一个日期和持续时间的列表:

-------------------------------------
Date                 |    Duration 
-------------------------------------
2018-08-08 16:00:00  |   00:45:00
2018-08-08 17:00:00  |   00:45:00
2018-08-08 18:00:00  |   00:45:00
2018-08-08 20:00:00  |   00:45:00
-------------------------------------

所需的表输出:

-------------------------------------
Date                 |    Duration 
-------------------------------------
2018-08-08 16:00:00  |   02:45:00
2018-08-08 20:00:00  |   00:45:00
-------------------------------------

有人可以告诉我这个 mysql 查询吗?我的大脑落后了。

编辑1:

我现在将尝试选择来匹配相邻查询:

SELECT * FROM appointments WHERE Date BETWEEN ADDTIME(Date, '00:30:00') AND ADDTIME(Date, '01:00:00');

编辑该字段而不是循环以查看是否获取更多行。

最佳答案

考虑以下...

CREATE TABLE my_table
    (date DATETIME NOT NULL PRIMARY KEY, duration TIME NOT NULL);


INSERT INTO my_table
    (date, duration)
VALUES
    ('2018-08-08 16:00:00', '00:45:00'),
    ('2018-08-08 17:00:00', '00:45:00'),
    ('2018-08-08 18:00:00', '00:45:00'),
    ('2018-08-08 20:00:00', '00:45:00')
;

SELECT MIN(date) date
     , SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) n
  FROM 
     ( SELECT x.*
            , CASE WHEN @prev >= date - INTERVAL 1 HOUR THEN @i := @i ELSE @i:= @i+1 END i
            , @prev := date prev
         FROM my_table x
            , (SELECT @prev := null, @i:=0) vars
        ORDER
           BY date
     ) a
 GROUP 
    BY i;

+---------------------+----------+
| date                | n        |
+---------------------+----------+
| 2018-08-08 16:00:00 | 02:15:00 |
| 2018-08-08 20:00:00 | 00:45:00 |
+---------------------+----------+

http://sqlfiddle.com/#!9/55a1c2c/3

关于mysql - 如果日期在相邻小时内,则合并日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51661610/

相关文章:

mysql - 如何在SQL中按特定组排序

MySQL 数据库迁移和同步

php - 使用php上传文件后无法将某些扩展文件的详细信息存储到数据库中

php - 如果数据与数据库完全匹配,Mysqli 更新数据

php - bcrypt 哈希值应该存储在主用户表中还是它自己的表中?

php - PHP行更新有一个小缺陷

mysql - 选择两个表中不存在的值

mysql - 使用python将多个CSV文件导入mysql

mysql - 无法重新连接到链接表 ODBC VBA

php - 如何在xml和php中只查询一个节点?