sql >> Base de Datos >  >> RDS >> Mysql

Seleccionar en cambio de valor

Este es un tipo de problema de lagunas e islas. Las islas son filas adyacentes que tienen el mismo batchnum , y quieres el inicio de cada isla.

Aquí, el enfoque más simple es probablemente lag() :

select *
from (
    select e.*,
        lag(batchnum) over(order by time) lag_batchnum
    from example e
) e
where not lag_batchnum <=> batchnum

Tenga en cuenta que esto requiere MySQL 8.0. En versiones anteriores, una alternativa utiliza una subconsulta correlacionada:

select e.*
from example e
where not batchnum <=> (
    select e1.batchnum
    from example e1
    where e1.time < e.time
    order by e1.time desc
    limit 1
)

Aquí hay una demostración en DB Fiddle .