sql >> Databasteknik >  >> RDS >> Mysql

Att välja rader baserat på några regler

I denna demo satte jag ihop alla testfall på samma bord. Här kan du kontrollera rätt resultat för fall 1,2,3 för fall 4,5 du behöver ändra @language := 'de' till 'es' .

För din slutliga version behöver du inte @partition , endast @user .

I grund och botten är detta samma lösning som @Gordon men eftersom du inte kan använda row_number() vi emulerar det med hjälp av användarvariabler.

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

med @language := 'de' för de tre första testfallen.

| 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. Avbryt lika perioder i slutet av månaden

  2. Hur returnerar du kolumnnamnen för en tabell?

  3. Hur man skickar e-post från SQL Server (T-SQL)

  4. hur man visar motsvarande post från åtkomst baserat på annan kolumn i Datagrid i vb6