我有3列(postgres 9.6)的表:serial,timestamp,clock_name 通常每行之间有1秒不同,但有时间隔更大。
我试图获得两行之间的时间戳间隔大于10秒的情况(假设我将此限制为1000行)
我想在一个查询中执行此操作(可能从select中选择)但我不知道如何编写这样的查询,我的sql knowladge非常基础。
任何帮助将不胜感激
答案 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