按时差对数据库条目进行分组

six*_*x86 5 postgresql timestamp group-by postgresql-9.1

我有一个带有日志数据的大型 postgreSQL 数据库。所有这些数据都有时间戳,我想对时间戳之间的差异小于 1500 毫秒的连续行进行分组。

例如:

1349427083272
1349427083669
1349427083707
1349427084277
1349427084787
1349427093471
1349427094031
1349427094307
1349427094980
1349427095879
1349427097211
1349437622947
1349437623813
1349437624316
1349437624815
1349437624938
Run Code Online (Sandbox Code Playgroud)

应导致以下组:

1349427083272
1349427083669
1349427083707
1349427084277
1349427084787

1349427093471
1349427094031
1349427094307
1349427094980
1349427095879
1349427097211

1349437622947
1349437623813
1349437624316
1349437624815
1349437624938
Run Code Online (Sandbox Code Playgroud)

组标识符可以只是一个唯一的整数。

在 MySQL 中,我发现了一个类似的例子,它使用了很多变量,但我不知道如何在 postgreSQL 中做到这一点。有人可以帮我吗?

six*_*x86 5

根据 FrustratedWithFormsDesigner 的评论,我得出了以下解决方案:

SELECT subq2.*, sum(new_group) OVER (ORDER BY t ASC) AS group_id
FROM (
  SELECT subq.*, CASE WHEN delta > 1500 THEN 1 ELSE 0 END AS new_group
  FROM (
    SELECT t, lag(t) over (ORDER BY t ASC),
      t - lag(t) over (ORDER BY t ASC) AS delta
    FROM time_points
  ) AS subq
) AS subq2
Run Code Online (Sandbox Code Playgroud)

我使用所有 new_group 值的总和来创建不同的组。非常感谢!