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

SQL Kembalikan 1,0 dalam variabel baru berdasarkan kasus ketika pernyataan merujuk ke beberapa variabel lain

  • Karena tidak ada Kunci Utama yang ditentukan, saya berasumsi bahwa data dimasukkan secara berurutan pada creation_date dan ladder_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 setelah Select 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 menentukan ladder_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            |

Lihat 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. Mengapa referensi ke wp_postmeta sangat lambat?

  2. InnoDB Tabelnya penuh kesalahan

  3. Tidak dapat menghentikan MySQL di OS X 10.10

  4. Filter menurut COUNT(*)?

  5. Tentang kursor dan iterator mysql