Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql按序列分组时间戳_Sql_Postgresql - Fatal编程技术网

postgresql按序列分组时间戳

postgresql按序列分组时间戳,sql,postgresql,Sql,Postgresql,我已经两周大了,所以如果你能幽默一点的话,我会很有帮助的 在这种情况下,我很难弄清楚如何按一系列连续的时间戳小时步骤进行分组 For example: ID time 1 2008-11-11 01:00:00 2 2008-11-11 02:00:00 3 2008-11-11 04:00:00 4 2008-11-11 05:00:00 5 2008-11-11 06:00

我已经两周大了,所以如果你能幽默一点的话,我会很有帮助的

在这种情况下,我很难弄清楚如何按一系列连续的时间戳小时步骤进行分组

For example:

ID          time
1           2008-11-11 01:00:00
2           2008-11-11 02:00:00
3           2008-11-11 04:00:00
4           2008-11-11 05:00:00
5           2008-11-11 06:00:00 
6           2008-11-11 08:00:00
我想以这样的分组结束:

Group    above_table_ID's
1        1,2
2        3,4,5
3        6
这很容易在python循环中表达,但我真的不明白如何在sql/postgresql中表达这种逻辑

如果有人能帮我解释这个过程,我将不胜感激


谢谢

您可以从时间戳中减去一个递增的数字,以小时为单位。连续的事物将具有相同的价值

select row_number() over (order by grp) as GroupId,
       string_agg(id, ',') as ids
from (select t.*,
             (time - row_number() over (order by time) * interval '1 hour') as grp
      from table t
     ) t
group by grp;

您可以通过从时间戳中减去一个递增的数字来实现这一点,以小时为单位。连续的事物将具有相同的价值

select row_number() over (order by grp) as GroupId,
       string_agg(id, ',') as ids
from (select t.*,
             (time - row_number() over (order by time) * interval '1 hour') as grp
      from table t
     ) t
group by grp;

戈登,你引领我走向了窗口功能,很可能改变了我的生活。谢谢你,戈登,你引领我走向了窗口功能,很可能改变了我的生活。非常感谢。