Mysql
 sql >> Database >  >> RDS >> Mysql

Selezionare su modifica valore

Questa è una specie di problema di lacune e isole. Le isole sono righe adiacenti che hanno lo stesso batchnum e vuoi l'inizio di ogni isola.

Qui, l'approccio più semplice è probabilmente lag() :

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

Nota che questo richiede MySQL 8.0. Nelle versioni precedenti, un'alternativa utilizza una sottoquery correlata:

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
)

Ecco una demo su DB Fiddle .