我在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中表达这种类型的逻辑。
如果有人能帮我向我解释这个过程,我们将不胜感激。
谢谢
答案 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;