2017-07-17 58 views
0

我有3列(postgres 9.6)的表:serial,timestamp,clock_name 通常每行之间有1秒不同,但有时间隔更大。如何获得PostgresSQL中下一行间隔大于xx秒的间隔时间的计数

我试图让场合表示2行之间的时间戳间隔为大于10的秒数(可以说我限制这个到1000行)

我想这样做在一个查询(大概从select中选择)但我不知道如何编写这样的查询,我的sql知识库是非常基础的。

任何帮助将不胜感激

回答

1

您可以使用窗口函数来检索下一条记录记录中给出的当前记录。

在函数上使用ORDER BY以确保事物符合时间戳顺序并使用PARTITION保持时钟分离,您可以为每行找到它后面的行。

WITH links AS 
(
SELECT 
    id, ts, clock, LEAD(ts) OVER (PARTITION BY clock ORDER BY ts) AS next_ts 
FROM myTable 
) 
SELECT * FROM links 
WHERE 
EXTRACT(EPOCH FROM (next_ts - ts)) > 10 

然后您可以比较时间戳。

窗口功能https://www.postgresql.org/docs/current/static/functions-window.html

或者,如果你喜欢使用派生表,而不是与条款。

SELECT * FROM (
    SELECT 
    id, ts, clock, LEAD(ts) OVER (PARTITION BY clock ORDER BY ts) AS next_ts 
    FROM myTable 
) links 
WHERE 
EXTRACT(EPOCH FROM (next_ts - ts)) > 10