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

Cara menentukan perubahan antar baris secara efisien menggunakan SQL

Anda dapat mencoba ini - saya tidak akan menjamin bahwa itu akan berkinerja lebih baik, tetapi ini adalah cara saya yang biasa untuk menghubungkan baris dengan baris "sebelumnya":

SELECT
    * --TODO, list columns
FROM
    data d
       left join
    data d_prev
       on
           d_prev.time < d.time --TODO - Other key columns?
       left join
    data d_inter
       on
           d_inter.time < d.time and
           d_prev.time < d_inter.time --TODO - Other key columns?
WHERE
    d_inter.time is null AND
    (d_prev.value is null OR d_prev.value <> d.value)

(Saya pikir ini benar - dapat dilakukan dengan beberapa sampel data untuk memvalidasinya).

Pada dasarnya, idenya adalah untuk menggabungkan tabel dengan dirinya sendiri, dan untuk setiap baris (dalam d ), temukan baris kandidat (di d_prev ) untuk baris "sebelumnya". Kemudian lakukan join lebih lanjut, untuk mencoba menemukan baris (di d_inter ) yang ada di antara baris saat ini (di d ) dan baris kandidat (di d_prev ). Jika kita tidak dapat menemukan baris seperti itu (d_inter.time is null ), maka kandidat itu memang baris sebelumnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan nilai kotak centang ke dalam database

  2. gagal mengeksekusi pernyataan dengan php dan mysql

  3. skema database untuk atribut produk

  4. mencegah penyisipan baris duplikat di php/mysql

  5. menentukan classpath untuk jython mandiri