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

Vælg på værdiændring

Dette er en slags huler-og-øer-problem. Øer er tilstødende rækker, der har det samme batchnum , og du vil have starten på hver ø.

Her er den enkleste fremgangsmåde sandsynligvis lag() :

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

Bemærk, at dette kræver MySQL 8.0. I tidligere versioner bruger et alternativ en korreleret underforespørgsel:

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
)

Her er en demo på DB Fiddle .




  1. Hvordan VÆLGES efter MAX(dato)?

  2. Valg af alle felter undtagen kun ét felt i mysql

  3. Sådan opretter du en Schema Bound Stored Procedure i SQL Server

  4. Henter antallet af rækker med en bestemt værdi efter filtrering af forespørgsel gennem datovælger