Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कुछ नियमों के आधार पर पंक्तियों का चयन

इस डेमो में मैंने सभी टेस्ट केस को एक ही टेबल पर एक साथ रखा है। यहां आप 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 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql डेटाबेस से दो स्पिनरों को पॉप्युलेट करें जो एक दूसरे पर निर्भर हैं

  2. date_format के साथ दिनांक सीमा MySQL का चयन करना

  3. MySQL त्रुटि 1290 (HY000) --सुरक्षित-फ़ाइल-निजी विकल्प

  4. php pdo की आवश्यकता है सरणियों को फंसाना और mysql में कई पंक्तियाँ सम्मिलित करना

  5. MySQL क्वेरी जंगली हो गई?