इस डेमो में मैंने सभी टेस्ट केस को एक ही टेबल पर एक साथ रखा है। यहां आप 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)
) 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;
आउटपुट
@language := 'de'
. का उपयोग करना पहले 3 परीक्षण मामलों के लिए।
| 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 |