sql >> Base de Datos >  >> RDS >> PostgreSQL

Seleccione solo las filas que tienen una columna cambiada de las filas anteriores, dada una ID única

Este es un problema de lagunas e islas. Desea el inicio de cada isla, que puede identificar comparando el estado en la fila actual con el estado en el registro "anterior".

Las funciones de ventana son útiles para esto:

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