sql >> Databasteknik >  >> RDS >> Mysql

Välj på värdeändring

Det här är ett slags luckor-and-öar-problem. Öar är intilliggande rader som har samma batchnum , och du vill ha början på varje ö.

Här är förmodligen den enklaste metoden lag() :

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

Observera att detta kräver MySQL 8.0. I tidigare versioner använder ett alternativ en korrelerad underfråga:

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
)

Här är en demo på DB Fiddle .




  1. Det gick inte att skapa en rumslig databas. FEL:kunde inte ladda biblioteket /usr/pgsql-9.1/lib/rtpostgis-2.0.so

  2. Hur kan jag infoga i en BLOB-kolumn från en insert-sats i sqldeveloper?

  3. Dapper MySQL returvärde

  4. Hur kan jag infoga batch i en Oracle-databas med Python?