mat*_*teo 5 postgresql aggregate datetime
我的第一个问题在这里,但我查看了许多其他地方并找不到我的问题的答案。
id | track_seg_id | time
----+--------------+---------------------
1 | 0 | 2020-05-23 07:45:32
2 | 0 | 2020-05-23 07:46:04
3 | 0 | 2020-05-23 07:46:53
4 | 0 | 2020-05-23 07:46:58
5 | 0 | 2020-05-23 07:47:03
6 | 0 | 2020-05-23 07:47:08
7 | 0 | 2020-05-23 07:47:11
8 | 0 | 2020-05-23 07:47:16
9 | 0 | 2020-05-23 07:47:20
10 | 0 | 2020-05-23 07:47:23
Run Code Online (Sandbox Code Playgroud)
我想要做的是progressive sum
从第一行到下一行获得几秒钟。
id | track_seg_id | time | prog
----+--------------+---------------------+---------------------
1 | 0 | 2020-05-23 07:45:32 | 0
2 | 0 | 2020-05-23 07:46:04 | 32
3 | 0 | 2020-05-23 07:46:53 | 81
4 | 0 | 2020-05-23 07:46:58 | 86
5 | 0 | 2020-05-23 07:47:03 | 91
6 | 0 | 2020-05-23 07:47:08 | 96
7 | 0 | 2020-05-23 07:47:11 | 99
8 | 0 | 2020-05-23 07:47:16 | 104
9 | 0 | 2020-05-23 07:47:20 | 108
10 | 0 | 2020-05-23 07:47:23 | 111
Run Code Online (Sandbox Code Playgroud)
我认为您的意思是“秒”,而不是“分钟”,并且您的值略有偏差。
如果我的怀疑是正确的,你可以用窗函数做到这一点first_value
,并使用extract
提取的秒数:
SELECT *,
EXTRACT(epoch FROM
time - first_value(time) OVER (ORDER BY time)
)
FROM mytable;
id | track_seg_id | time | date_part
----+--------------+---------------------+-----------
1 | 0 | 2020-05-23 07:45:32 | 0
2 | 0 | 2020-05-23 07:46:04 | 32
3 | 0 | 2020-05-23 07:46:53 | 81
4 | 0 | 2020-05-23 07:46:58 | 86
5 | 0 | 2020-05-23 07:47:03 | 91
6 | 0 | 2020-05-23 07:47:08 | 96
7 | 0 | 2020-05-23 07:47:11 | 99
8 | 0 | 2020-05-23 07:47:16 | 104
9 | 0 | 2020-05-23 07:47:20 | 108
10 | 0 | 2020-05-23 07:47:23 | 111
(10 rows)
Run Code Online (Sandbox Code Playgroud)