В тази демонстрация събрах всички тестови случаи на една и съща маса. Тук можете да проверите правилния резултат за случаи 1,2,3 за случай 4,5 трябва да промените @language :='de'
към 'es'
.
За окончателната ви версия няма да е необходим @partition
, само @user
.
По принцип това е същото решение като @Gordon, но тъй като не можете да използвате row_number()
ние го емулираме с помощта на потребителски променливи.
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 тестови случая.