【发布时间】:2020-03-05 20:59:30
【问题描述】:
使用旧版本的 MySQL,其中 WITH 子句无效。
从表格开始:
+--------+---------------------+---------------------+
| person | start_time | end_time |
+--------+---------------------+---------------------+
| Alice | 2020-02-27 20:00:00 | 2020-02-27 20:59:59 |
| Alice | 2020-02-27 23:45:00 | 2020-02-27 23:59:59 |
| Alice | 2020-02-28 00:00:00 | 2020-02-28 00:59:59 |
| Alice | 2020-02-28 01:00:00 | 2020-02-28 01:59:59 |
| Bob | 2020-02-27 23:45:00 | 2020-02-27 23:59:59 |
| Cindy | 2020-02-28 02:00:00 | 2020-02-28 02:59:59 |
| Cindy | 2020-02-28 03:00:00 | 2020-02-28 03:36:59 |
+--------+---------------------+---------------------+
我想要一个查询来汇总每个人在一小时内的所有持续时间。
+--------+---------------------+---------------------+----------+
| person | start_time | end_time | duration |
+--------+---------------------+---------------------+----------+
| Alice | 2020-02-27 20:00:00 | 2020-02-27 20:59:59 | 3599 |
| Alice | 2020-02-27 23:45:00 | 2020-02-28 01:59:59 | 8064 |
| Bob | 2020-02-27 23:45:00 | 2020-02-27 23:59:59 | 899 |
| Cindy | 2020-02-28 02:00:00 | 2020-02-28 03:36:59 | 5806 |
+--------+---------------------+---------------------+----------+
【问题讨论】:
-
这种任务在没有实现递归查询的数据库中真的很不容易。
-
应该
Bobend_time是2020-02-27 23:59:59 -
谢谢彼得。我在示例中更正了它。
-
不要认为您可以在单个查询中做到这一点。制作一个程序并在程序内使用游标遍历行并计算每个用户的持续时间。将结果存储在临时表中,并在过程结束时返回结果集。试试看,如果你有问题,用代码发布一个问题。
-
@slaakso 为什么不呢?
标签: mysql sql date-range gaps-and-islands mysql-5.6