sql >> Databáze >  >> RDS >> Sqlserver

SQL dotaz pro vrácení pouze 1 záznamu na ID skupiny

SELECT  t.*
FROM    (
        SELECT  DISTINCT groupid
        FROM    mytable
        ) mo
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable mi
        WHERE   mi.groupid = mo.groupid
        ORDER BY
                age DESC
        ) t

nebo toto:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn
        FROM    mytable
        ) x
WHERE   x.rn = 1

Tím se vrátí maximálně jeden záznam na skupinu i v případě remíz.

V tomto článku na mém blogu naleznete srovnání výkonu obou metod:



  1. Jak seřadit výsledek více dotazů alternativně?

  2. sqlalchemy se neprovádí Komentář ke schématu

  3. Připojení Postgres je z PHP pomalé

  4. Jak najít duplicitní počet mezi několika sloupci?