Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta SQL para retornar apenas 1 registro por ID de grupo

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

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

Isso retornará no máximo um registro por grupo, mesmo em caso de empate.

Veja este artigo no meu blog para comparações de desempenho de ambos os métodos: