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

Memilih baris berdasarkan beberapa aturan

Dalam demo ini saya mengumpulkan semua kasus uji di tabel yang sama. Di sini Anda dapat memeriksa hasil yang tepat untuk kasus 1,2,3 untuk kasus 4,5 Anda perlu mengubah @language := 'de' ke 'es' .

Untuk versi final Anda tidak perlu @partition , hanya @user .

Pada dasarnya ini adalah solusi yang sama dengan @Gordon tetapi karena Anda tidak dapat menggunakan row_number() kami menirunya menggunakan variabel pengguna.

SQL DEMO

SELECT *
FROM (
      SELECT t.*,
             @rn := if (@partition = CONCAT(`test_id`, '-', `user`),
                        @rn + 1,
                        if(@partition := CONCAT(`test_id`, '-', `user`), 1, 1)
                       ) as rn,
             @partition           
      FROM (
        SELECT *, (language = @language) AS priority
        FROM Table1
        CROSS JOIN (SELECT @language := 'de' as site_lang) AS var
        ORDER BY CONCAT(test_id, '-', user),
                priority DESC,
                created
      ) AS t
      CROSS JOIN ( SELECT @rn := 0, @partition := '' ) as var
    ) r
WHERE r.rn = 1;

OUTPUT

menggunakan @language := 'de' untuk 3 kasus uji pertama.

| test_id | id | title | language |              created | user | site_lang | priority | rn | @partition |
|---------|----|-------|----------|----------------------|------|-----------|----------|----|------------|
|       1 |  3 |     c |       de | 2019-01-03T00:00:00Z |    4 |        de |        1 |  1 |        1-4 |
|       2 |  1 |     a |       en | 2019-01-01T00:00:00Z |    4 |        de |        0 |  1 |        2-4 |
|       3 |  1 |     a |       en | 2019-01-01T00:00:00Z |    3 |        de |        0 |  1 |        3-3 |
|       3 |  3 |     b |       de | 2019-01-03T00:00:00Z |    4 |        de |        1 |  1 |        3-4 |
|       3 |  4 |     c |       de | 2019-01-04T00:00:00Z |    5 |        de |        1 |  1 |        3-5 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Contoh UTC_DATE – MySQL

  2. PHP Kesalahan fatal:Kelas 'PDO' tidak ditemukan

  3. Kerangka Entitas dengan mysql, masalah Kapitalisasi Tabel antara linux dan windows

  4. Menggunakan MySQL C API - periksa keberhasilan penyisipan baris menggunakan pernyataan yang disiapkan

  5. NodeJS, tidak menutup koneksi mysql