postgresql group by sequence time stamps

时间:2014-06-16 22:03:41

标签: sql postgresql

我在SQL时间大约两周了,所以如果你能给我一点点幽默,那将会非常有帮助。

我无法弄清楚如何group by一系列连续时间戳(在这种情况下为小时步数)。

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中表达这种类型的逻辑。

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

谢谢

1 个答案:

答案 0 :(得分:3)

您可以通过从时间戳中减去增加的数字(以小时为单位)来完成此操作。顺序的东西将具有相同的价值。

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;