sql >> Databáze >  >> RDS >> Mysql

Výběr řádků na základě několika pravidel

V tomto demu jsem dal dohromady všechny testovací případy na jeden stůl. Zde můžete zkontrolovat správný výsledek pro případy 1,2,3 pro případ 4,5, který potřebujete změnit @language := 'de' na 'es' .

Pro vaši finální verzi nebudete potřebovat @partition , pouze @user .

V podstatě se jedná o stejné řešení jako @Gordon, ale protože nemůžete použít row_number() emulujeme jej pomocí uživatelských proměnných.

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;

VÝSTUP

pomocí @language := 'de' pro první 3 testovací případy.

| 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. Kontrola stavu databázových poštovních front na serveru SQL Server (T-SQL)

  2. MySQL dotaz - pomocí SUM of COUNT

  3. Skript Google Apps pro export tabulek do mySQL se spouští na více souborech

  4. Jak získat poslední záznam s konkrétním ID v codeigniter