sql >> Database teknologi >  >> RDS >> Mysql

Valg af rækker baseret på nogle få regler

I denne demo har jeg samlet alle testcases på samme bord. Her kan du tjekke det rigtige resultat for tilfælde 1,2,3 for tilfælde 4,5 du skal ændre @language := 'de' til 'es' .

For din endelige version behøver du ikke @partition , kun @user .

Grundlæggende er dette den samme løsning som @Gordon, men fordi du ikke kan bruge row_number() vi emulerer det ved hjælp af brugervariabler.

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;
 

OUTPUT

ved hjælp af @language := 'de' for de første 3 testcases.

| 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. NLS_COLLATION_NAME() Funktion i Oracle

  2. nulstil root-adgangskoden med forkert mysql-konfiguration

  3. Hvordan integrerer man Asterisk-server med ekstern relationsdatabase, som mysql?

  4. SQL-syntaksfejl med understreng og charindex