PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Seleziona solo le righe con una colonna modificata dalle righe precedenti, con un ID univoco

Questo è un problema di lacune e isole. Vuoi l'inizio di ogni isola, che puoi identificare confrontando lo stato sulla riga corrente con lo stato sul record "precedente".

Le funzioni della finestra sono utili per questo:

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