PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Selecione apenas as linhas que tenham uma coluna alterada das linhas anteriores, com um ID exclusivo


Este é um problema de lacunas e ilhas. Você quer o início de cada ilha, que você pode identificar comparando o status na linha atual com o status no registro "anterior".

As funções da janela são úteis para isso:
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