sql >> データベース >  >> RDS >> Sqlserver

グループ ID ごとに 1 つのレコードのみを返す SQL クエリ

    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
    

    またはこれ:

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

    これにより、同数の場合でも、グループごとに最大 1 つのレコードが返されます。

    両方の方法のパフォーマンス比較については、私のブログのこの記事を参照してください:



    1. 親子チェーンのSQLクエリ

    2. SQL左結合

    3. MySQLクエリ-バージョン番号を比較

    4. 陳記法