sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-forespørgsel returnerer kun 1 post pr. gruppe-id

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

eller dette:

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

Dette vil højst returnere én post pr. gruppe, selv i tilfælde af uafgjort.

Se denne artikel i min blog for præstationssammenligninger af begge metoder:



  1. finder MAX(db_timestamp) forespørgsel

  2. Læs og importer CSV-filer i Oracle PL/SQL effektivt

  3. Sådan SUMMER du fra MySQL for hver n post

  4. Konvertering af en streng til dato og hævning af en undtagelse, når en given streng er ugyldig