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

各グループの上から1行を選択

    SQL-Server (最小 2005) を使用している場合は、CTE を使用できます ROW_NUMBER で 関数。 CAST を使用できます 正しい順序を取得するためのバージョン:

    WITH cte 
         AS (SELECT id, 
                    userid, 
                    version, 
                    datetime, 
                    Row_number() 
                      OVER ( 
                        partition BY userid 
                        ORDER BY Cast(version AS INT) DESC) rn 
             FROM   [dbo].[table]) 
    SELECT id, 
           userid, 
           version, 
           datetime 
    FROM   cte 
    WHERE  rn = 1 
    ORDER BY userid
    

    デモ

    ROW_NUMBER 同じ (トップ) バージョンのユーザーが複数いる場合でも、常に 1 つのレコードを返します。すべての "top-version-user-records" を返したい場合は、ROW_NUMBER を置き換える必要があります DENSE_RANKで .



    1. PostgreSQLによるインプレースアップデート

    2. Mysqlの連続する行の距離(経度、緯度)の合計を計算するためのクエリ

    3. Postgres json_aggに列ヘッダーが含まれています-JSONが正しくありませんか?

    4. Ansibleの別のホストの別のタスクで1つのタスクの戻り値を使用する方法