PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wählen Sie nur Zeilen aus, bei denen sich eine Spalte gegenüber den Zeilen davor geändert hat, und erhalten Sie eine eindeutige ID

Dies ist ein Lücken-und-Insel-Problem. Sie möchten den Anfang jeder Insel, die Sie identifizieren können, indem Sie den Status in der aktuellen Zeile mit dem Status im "vorherigen" Datensatz vergleichen.

Fensterfunktionen sind dafür praktisch:

select t.*
from (
    select t.*, lag(status) over(partition by personID order by unixtime) lag_status
    from mytable t
) t
where lag_status is null or status <> lag_status