我有一个日期和持续时间的列表:
-------------------------------------
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 |
+---------------------+----------+
关于mysql - 如果日期在相邻小时内,则合并日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51661610/