【发布时间】:2019-08-02 15:00:36
【问题描述】:
我有一个类似这样的表:
+---------------+---------------------+---------------------+-----------------------+
| event_type_id | start_time | end_time | hours_from_last_event |
+---------------+---------------------+---------------------+-----------------------+
| 1 | 2019-06-07 0:00:00 | 2019-06-07 22:00:00 | |
| 1 | 2019-06-09 21:00:00 | 2019-06-09 23:00:00 | |
| 1 | 2019-06-10 16:00:00 | 2019-06-10 20:00:00 | |
| 2 | 2019-06-05 14:00:00 | 2019-06-05 19:00:00 | |
| 2 | 2019-06-07 03:00:00 | 2019-06-07 21:00:00 | |
+---------------+---------------------+---------------------+-----------------------+
对于每一行,只有当event_type_id 相等时,我想通过从当前行的start_time 中减去上一行的end_time 来设置hours_from_last_event。如果该行没有前一行,则应为NULL。
所以上表会变成:
+---------------+---------------------+---------------------+-----------------------+
| event_type_id | start_time | end_time | hours_from_last_event |
+---------------+---------------------+---------------------+-----------------------+
| 1 | 2019-06-07 0:00:00 | 2019-06-07 22:00:00 | NULL |
| 1 | 2019-06-09 21:00:00 | 2019-06-09 23:00:00 | 47 |
| 1 | 2019-06-10 16:00:00 | 2019-06-10 20:00:00 | 17 |
| 2 | 2019-06-05 14:00:00 | 2019-06-05 19:00:00 | NULL |
| 2 | 2019-06-07 03:00:00 | 2019-06-07 21:00:00 | 32 |
+---------------+---------------------+---------------------+-----------------------+
我们可以假设存在一个id 列来唯一标识每一行。
我已经知道我可以使用TIMEDIFF() 函数来查找小时差,但是我应该如何在 MySQL 中执行此操作?
【问题讨论】:
-
存储容易派生的数据通常被认为是个坏主意。