sql >> Databáze >  >> RDS >> Mysql

Vyberte při změně hodnoty

Toto je druh problému mezer a ostrovů. Ostrovy jsou sousední řádky, které mají stejné batchnum a chcete začátek každého ostrova.

Zde je pravděpodobně nejjednodušší přístup lag() :

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

Všimněte si, že to vyžaduje MySQL 8.0. V dřívějších verzích jedna alternativa používá korelovaný poddotaz:

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
)

Zde je demo na DB Fiddle .




  1. Použití PHPExcel k automatickému vytváření souborů Excel

  2. Výběr více hodnot max() pomocí jediného příkazu SQL

  3. Existuje způsob, jak může PHP ověřit syntaxi SQL bez jejího provedení?

  4. Jak klonovat uživatele v Oracle