Daten vergleichen

ice987

Neuer Benutzer
Beiträge
4
Hallo zusammen,

ich habe eine Log-Datenbank welche den Schaltzustand eines Schalters und deren Zeit kontinuierlich listet. Unglücklicherweise werden die Zustände unregelmässig mehrfach hintereinander gleich geloggt was bei einer tabellarischen Ausgabe keinen Sinn ergibt. Welches ist die einfachste Methode die folgenden Daten so auszugeben, dass bei mehreren gleichen „values“ nur der früheste Wert ausgegeben wird:

Datenbank:
Timestamp / Value
1598157000106 / 0
1598156934831 / 1https://192.168.1.149:8081/phpMyAdmin/tbl_change.php
1598149800088 / 1
1598149734821 / 0https://192.168.1.149:8081/phpMyAdmin/tbl_change.php
1598081955316 / 0
1598081875300 / 0
1598074755307 / 1

gewünschte Ausgabe:
Timestamp / Value
1598157000106 / 0
1598149800088 / 1
1598081875300 / 0
1598074755307 / 1
 
Werbung:
ich hab das mal mit einfachen Zahlen anstatt der langen timestamps da gemacht, außerdem BOOL-Werte verwendet:

Code:
test=*# select * from ice987 ;
 timestamp | val
-----------+-----
         1 | f
         2 | t
         3 | t
         4 | f
         5 | f
         6 | f
         7 | t
(7 rows)

Nun ist es einfach:

Code:
test=*# with temp as (select *, case when coalesce(lag(val) over (order by timestamp), not val) != val then true else false end as x from ice987) select timestamp, val from temp where x ;
 timestamp | val
-----------+-----
         1 | f
         2 | t
         4 | f
         7 | t
(4 rows)

Paßt doch, oder?
 
Hallo akretschmer,

vielen Dank für die super schnelle Antwort! Nun erhalte ich die Fehlermeldung, dass er die Funktion LAG nicht kennt. (FUNCTION lag does not exist). Gibts da evtl. eine alternative Lösung?
 
Tja.

lag() ist eine Window-Funktion. Damit (es gibt noch diverse weitere) kann man auf andere Datensätze zugreifen, und das ist hier exakt das, was Du suchst. Falsche Wahl des DB-Systems.
 
Werbung:
Zurück
Oben