如何计算PostgresSQL中下一行之间间隔大于xx秒的时间戳

时间:2017-07-17 07:37:29

标签: postgresql

我有3列(postgres 9.6)的表:serial,timestamp,clock_name 通常每行之间有1秒不同,但有时间隔更大。

我试图获得两行之间的时间戳间隔大于10秒的情况(假设我将此限制为1000行)

我想在一个查询中执行此操作(可能从select中选择)但我不知道如何编写这样的查询,我的sql knowladge非常基础。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分: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

或者如果您更喜欢使用派生表而不是WITH子句。

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