Mysql
 sql >> база данни >  >> RDS >> Mysql

Избор на редове въз основа на няколко правила

В тази демонстрация събрах всички тестови случаи на една и съща маса. Тук можете да проверите правилния резултат за случаи 1,2,3 за случай 4,5 трябва да промените @language :='de' към 'es' .

За окончателната ви версия няма да е необходим @partition , само @user .

По принцип това е същото решение като @Gordon, но тъй като не можете да използвате row_number() ние го емулираме с помощта на потребителски променливи.

SQL ДЕМОНСТРАЦИЯ

SELECT *FROM ( SELECT t.*, @rn :=if (@partition =CONCAT(`test_id`, '-', `user`), @rn + 1, if(@partition :=CONCAT(`test_id`, '-', `user`), 1, 1) ) като rn, @дял FROM ( SELECT *, (language =@language) AS приоритет FROM Table1 CROSS JOIN (SELECT @language :='de ' като site_lang) AS var ORDER BY CONCAT(test_id, '-', user), priority DESC, created ) AS t CROSS JOIN ( SELECT @rn :=0, @partition :='' ) as var ) rWHERE r.rn =1; 

ИЗХОД

използвайки @language :='de' за първите 3 тестови случая.

<предварителен код>| test_id | ID | заглавие | език | създаден | потребител | site_lang | приоритет | rn | @дял ||---------|----|-------|----------|------------ ----------|------|-----------|----------|----|---- --------|| 1 | 3 | c | де | 2019-01-03T00:00:00Z | 4 | де | 1 | 1 | 1-4 || 2 | 1 | a | en | 2019-01-01T00:00:00Z | 4 | де | 0 | 1 | 2-4 || 3 | 1 | a | en | 2019-01-01T00:00:00Z | 3 | де | 0 | 1 | 3-3 || 3 | 3 | б | де | 2019-01-03T00:00:00Z | 4 | де | 1 | 1 | 3-4 || 3 | 4 | c | де | 2019-01-04T00:00:00Z | 5 | де | 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. извличане на файлове от базата данни по пътя им в jsp

  2. Две колони с автоматично нарастване или автоматично увеличение и същата стойност в друга колона

  3. Проблеми с UTF-8 с tinymce?

  4. Най-бързият начин за намиране на разстояние между две широчини/дълги точки

  5. Множество заявки зависят една от друга