- Karena tidak ada Kunci Utama yang ditentukan, saya berasumsi bahwa data dimasukkan secara berurutan pada
creation_date
danladder_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 By
dijalankan setelahSelect
ayat; 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
Select
klausa, 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 .. When
ekspresi digunakan untuk perbandingan, dan menentukanladder_change
nilai.
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 |