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 中做到这一点。有人可以帮我吗?
根据 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 值的总和来创建不同的组。非常感谢!
归档时间: |
|
查看次数: |
1374 次 |
最近记录: |