2017-07-17 2 views
0

Ich habe eine Tabelle mit 3 Spalten (postgres 9.6): serial, timestamp, clock_name Normalerweise gibt es 1 Sekunde zwischen jeder Zeile, aber manchmal die Intervall ist größer.Wie bekomme ich die Anzahl der Zeitstempel mit einem Intervall größer als xx Sekunden zwischen der nächsten Zeile in PostgresSQL

Ich versuche, die Anzahl von Gelegenheiten zu erhalten, die die Zeitstempel Intervall zwischen zwei Reihen waren größer als 10 Sekunden (können sagen, dass ich diese Zeilen bis 1000) limit

Ich mag würde dies in einer Abfrage tun (wahrscheinlich wählen Sie aus, aber ich habe keine Ahnung, wie Sie eine solche Abfrage schreiben, meine SQL-Wissen ist sehr einfach.

Jede Hilfe wird

Antwort

1

Sie Funktionen verwenden, Fenster kann der aktuelle Datensatz den nächsten Datensatz Datensatz gegeben abzurufen geschätzt.

Mit ORDER BY der Funktion, um sicherzustellen, dass die Dinge in Zeitstempelreihenfolge sind und PARTITION verwendet wird, um die Uhren getrennt zu halten, können Sie für jede Zeile die folgende Zeile finden.

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 

Sie können dann einfach die Zeitstempel vergleichen.

Fensterfunktionen https://www.postgresql.org/docs/current/static/functions-window.html

Oder wenn Sie es vorziehen, statt WITH-Klausel abgeleitete Tabellen zu verwenden.

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 
Verwandte Themen