- Karena tidak ada Kunci Utama yang ditentukan, saya berasumsi bahwa data dimasukkan secara berurutan pada
creation_datedanladder_level. Ingat bahwa data disimpan secara tidak berurutan di MySQL. - Pertama, kita harus menggunakan kueri sub-pilih untuk mendapatkan data dalam urutan yang diperlukan (seperti yang disorot pada langkah sebelumnya). Perlu diperhatikan bahwa
Order Bydijalankan setelahSelectayat; jadi kita perlu mengurutkan data terlebih dahulu, lalu menggunakan kumpulan hasil sebagai Tabel Turunan . - Sekarang, kami akan mengambil bantuan dari Pengguna- variabel yang ditentukan
(tingkat sesi persisten dan dapat diakses). Di tabel turunan lain
user_init_vars, kami menginisialisasinya. - Dalam
Selectklausa, kami membandingkan nilai baris saat ini dengan nilai baris sebelumnya. Setelah perbandingan, kami menetapkan nilai variabel ke nilai baris saat ini. Anda dapat menganggapnya sebagai teknik perulangan, yang kami gunakan dalam bahasa pemrograman lain seperti PHP, C++, Java, dll. Case .. Whenekspresi digunakan untuk perbandingan, dan menentukanladder_changenilai.
Kueri #1
SELECT
dt.ID,
CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND
dt.ladder_level > @ll
THEN 1
ELSE 0
END AS ladder_change,
@rd := dt.record_date AS record_date,
@ll := dt.ladder_level AS ladder_level
FROM (SELECT ID, record_date, ladder_level
FROM conv_example
ORDER BY ID, record_date, ladder_level) AS dt
CROSS JOIN (SELECT @rd := '',
@ll := '') AS user_init_vars;
| ID | ladder_change | record_date | ladder_level |
| ----- | ------------- | ------------------- | ------------ |
| 324 | 0 | 2016-09-15 00:00:00 | a |
| 324 | 0 | 2016-09-15 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | e |
| 1234 | 0 | 2013-04-03 00:00:00 | |
| 1234 | 0 | 2014-07-03 00:00:00 | a |
| 1234 | 1 | 2015-04-01 00:00:00 | b |
| 1234 | 1 | 2016-09-15 00:00:00 | d |
| 1234 | 0 | 2017-02-04 00:00:00 | b |
| 1234 | 0 | 2017-04-03 00:00:00 | b |
| 1234 | 1 | 2017-04-07 00:00:00 | c1 |
| 1234 | 1 | 2018-09-08 00:00:00 | e |
| 31431 | 0 | 2013-04-03 00:00:00 | |
| 31431 | 0 | 2014-07-03 00:00:00 | a |
| 31431 | 1 | 2017-04-07 00:00:00 | c1 |
| 31431 | 1 | 2018-09-08 00:00:00 | e |