sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga för att returnera endast 1 post per grupp-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 detta:

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

Detta kommer att returnera högst en post per grupp även vid oavgjort resultat.

Se den här artikeln i min blogg för prestandajämförelser av båda metoderna:



  1. php json_encode mysql resultat

  2. PHP Mysql går samman över databaser

  3. Oracle Floats vs Number

  4. Kapslad Select-sats i MYSQL join