【发布时间】:2020-02-24 16:35:31
【问题描述】:
在 mysql 数据库 (ver.5.7.15) 中,我有一个名为 operation_list 的表,其中包含以下数据:id (autoincrement整数,主键),操作日期时间(日期时间),操作(枚举值:START,STOP),所以表格如下所示:
+------+---------------------+-----------+
| id | operation_date_time | operation |
+------+---------------------+-----------+
| 1 | 2000-01-01 06:30:45 | START |
| 2 | 2000-01-01 07:45:00 | STOP |
| 3 | 2000-01-01 08:18:12 | START |
| 4 | 2000-01-01 11:23:58 | STOP |
| 5 | 2000-01-01 15:45:01 | START |
| 6 | 2000-01-01 19:01:33 | STOP |
+------+---------------------+-----------+
现在,假设第一行始终是 START,最后一行始终是 STOP,STOP 始终放在 START 之后,我需要检索 START 和 STOP 之间的时间差(以秒为单位)。因此,我需要编写一个 SQL 来生成以下记录集:
+------+---------------------+-----------+
| id | operation_date_time | duration |
+------+---------------------+-----------+
| 1 | 2000-01-01 06:30:45 | 4455 |
| 3 | 2000-01-01 08:78:12 | 11146 |
| 5 | 2000-01-01 15:45:01 | 11792 |
+------+---------------------+-----------+
其中 4455 相当于 1 小时 14 分 15 秒, 11146 相当于 3 小时 5 分 46 秒, 11792 相当于 3 小时 16 分 32 秒,以此类推。
在不创建额外表或专用脚本的情况下,在单个 SQL 语句中执行此操作的最佳方法是什么?
【问题讨论】:
-
用您正在使用的数据库标记您的问题。