我在Postgres有一张表T1,如下:
| event | Date_Time |
|-------|--------------------------|
| start | 2018-04-30T06:09:30.986Z |
| run | 2018-04-30T10:37:38.044Z |
| end | 2018-04-30T11:39:38.044Z |
Date_Time是ISO格式(存储为varchar),我需要计算Date_Time的差异,以便我的输出如下:
| event | Date_Time | Time_Difference |
|-------|--------------------------|-----------------|
| start | 2018-04-30T06:09:30.986Z | 4:28:08 |
| run | 2018-04-30T10:37:38.044Z | 1:02:00 |
| end | 2018-04-30T11:39:38.044Z | |
(10:37:38 - 06:09:30 = 4:28:08)
如何使用SQL执行此操作?
答案 0 :(得分:4)
与此问题无关,但是:您应该从不在varchar
中存储时间戳(或日期或数字)值。
首先必须将varchar值转换为时间戳。如果值确实格式正确,您可以简单地投射它们:Date_Time::timestamp
- 或者可能投放到timestamptz
。
据我所知,您希望结果中的下一行与众不同。这可以通过window function lead()
select event,
Date_Time,
date_time::timestamp - lead(date_time::timestamp) over (order by date_time::timestamp) as time_difference
from the_table
order by date_time;