【发布时间】:2021-02-03 06:36:15
【问题描述】:
我有一个带有时间戳的 postgres 表,以及 difftime 中当前和上一个(滞后)时间戳之间的四舍五入小时差
timestamp type difftime
2013-09-14 14:19:46 JPR03 2
2013-09-14 15:11:48 JPR03 1
2013-09-14 16:11:49 JPR03 1
2013-09-14 17:13:45 JPR03 1
2013-09-22 00:08:38 JPR03 175
2013-09-22 00:10:11 JPR03 0
2013-09-22 01:11:36 JPR03 1
2013-09-22 02:16:11 JPR03 1
2013-09-22 03:13:16 JPR03 1
2013-09-22 04:05:38 JPR03 1
2013-09-22 06:10:11 JPR03 2
2013-09-22 07:26:43 JPR03 1
2013-09-22 08:17:35 JPR03 1
2013-09-22 09:16:08 JPR03 1
2013-09-22 10:16:08 JPR03 1
2013-10-01 06:15:07 JPR03 212
2013-10-01 06:15:12 JPR03 0
2013-10-02 07:15:15 JPR03 25
2013-10-02 08:05:09 JPR03 1
我的目标是创建一个递增的行号序列,当且仅当difftime 中的值高于某个阈值x(按时间排序)时才增加1。如果 x = 5,那么输出将如下所示:
timestamp type difftime rownum
2013-09-14 14:19:46 JPR03 2 0
2013-09-14 15:11:48 JPR03 1 0
2013-09-14 16:11:49 JPR03 1 0
2013-09-14 17:13:45 JPR03 1 0
2013-09-22 00:08:38 JPR03 175 1
2013-09-22 00:10:11 JPR03 0 1
2013-09-22 01:11:36 JPR03 1 1
2013-09-22 02:16:11 JPR03 1 1
2013-09-22 03:13:16 JPR03 1 1
2013-09-22 04:05:38 JPR03 1 1
2013-09-22 06:10:11 JPR03 2 1
2013-09-22 07:26:43 JPR03 1 1
2013-09-22 08:17:35 JPR03 1 1
2013-09-22 09:16:08 JPR03 1 1
2013-09-22 10:16:08 JPR03 1 1
2013-10-01 06:15:07 JPR03 212 2
2013-10-01 06:15:12 JPR03 0 2
2013-10-02 07:15:15 JPR03 25 3
2013-10-02 08:05:09 JPR03 1 3
我熟悉RANK()、DENSE_RANK()、ROW_NUMBER() 和COALESCE() 函数,但这些函数都不能实现按条件(从 0 开始)递增行号的目标。关于如何实现这种变量赋值或这里可以应用哪些函数来基于条件进行分区的任何建议?
【问题讨论】:
-
是上一行的条件还是自上次满足条件后的第一行的条件?
-
自上次满足条件以来的第一个,因此新值将在满足条件的同一记录上“开始”
标签: sql postgresql row-number run-length-encoding