Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih pada perubahan nilai

Ini semacam masalah gap and island. Kepulauan adalah baris yang berdekatan yang memiliki batchnum yang sama , dan Anda ingin memulai setiap pulau.

Di sini, pendekatan paling sederhana mungkin lag() :

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

Perhatikan bahwa ini membutuhkan MySQL 8.0. Di versi sebelumnya, satu alternatif menggunakan subquery yang berkorelasi:

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
)

Berikut adalah demo di DB Fiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memperbaiki kesalahan nilai string yang salah?

  2. Memfilter data MySQL di PHP untuk hanya menampilkan data pengguna sesi saat ini?

  3. Bagaimana cara menggunakan operator IN dengan JDBI?

  4. android listview update/refresh data tanpa menutup aplikasi

  5. mysql_fetch_array saat loop. Bagaimana cara kerjanya?