sql >> Database >  >> RDS >> Mysql

Rijen selecteren op basis van een paar regels

In deze demo heb ik alle testgevallen op dezelfde tafel bij elkaar gezet. Hier kunt u het juiste resultaat controleren voor gevallen 1,2,3 voor geval 4,5 moet u wijzigen @language := 'de' naar 'es' .

Voor uw definitieve versie heeft u geen @partition nodig , alleen @user .

In principe is dit dezelfde oplossing als @Gordon, maar omdat je row_number() niet kunt gebruiken we emuleren het met gebruikersvariabelen.

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;

UITVOER

met behulp van @language := 'de' voor de eerste 3 testgevallen.

| 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. Verschil tussen `brew services start mysql` en `mysql.server start`

  2. Hoe u gegevens van de afgelopen 12 maanden in MySQL kunt krijgen

  3. Waarom kan Java geen verbinding maken met MySQL 5.7 na de laatste JDK-update en hoe moet dit worden opgelost? (ssl.SSLHandshakeException:geen geschikt protocol)

  4. postgres jsonb_set meerdere sleutels bijwerken