Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn hàng dựa trên một số quy tắc

Trong bản demo này, tôi đặt tất cả các trường hợp thử nghiệm trên cùng một bảng. Tại đây, bạn có thể kiểm tra kết quả phù hợp cho trường hợp 1,2,3 và trường hợp 4,5 bạn cần thay đổi @language := 'de' thành 'es' .

Đối với phiên bản cuối cùng của bạn sẽ không cần @partition , chỉ @user .

Về cơ bản đây là giải pháp tương tự như @Gordon nhưng vì bạn không thể sử dụng row_number() chúng tôi mô phỏng nó bằng cách sử dụng các biến người dùng.

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;

ĐẦU RA

sử dụng @language := 'de' cho 3 trường hợp thử nghiệm đầu tiên.

| 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. Cách chọn từ MySQL trong đó Tên bảng là Biến

  2. Giải thích các hành vi trong ánh xạ chuỗi id hỗn hợp tăng dần tự động với Hibernate

  3. Giảm mức tiêu thụ bộ nhớ của mysql trên phiên bản vi mô [email protected]

  4. hiểu lỗi Java JDBC

  5. Hàng đầu tiên trong nhóm theo hàng so với hàng cuối cùng