PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Sélectionnez uniquement les lignes dont une colonne a été modifiée par rapport aux lignes précédentes, compte tenu d'un ID unique

Il s'agit d'un problème de lacunes et d'îlots. Vous voulez le début de chaque île, que vous pouvez identifier en comparant l'état de la ligne actuelle à l'état de l'enregistrement "précédent".

Les fonctions de fenêtre sont pratiques pour cela :

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