2017-07-17 43 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