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

特定の列のグループごとの最大値を保持する行(重複を強制終了する方法...)

    DECLARE @Data TABLE (ID INTEGER, X INTEGER, Y INTEGER)
    INSERT @Data VALUES (1,1,1),(2,1,2),(3,1,2),(4,1,3),(5,1,3),
        (6,2,4),(7,2,5),(8,2,5),(9,2,5),(10,3,1),(11,3,10),(12,3,10)
    
    ;WITH CTE AS
    (
    SELECT ID, X, Y, 
        ROW_NUMBER() OVER(PARTITION BY X ORDER BY Y DESC, ID ASC) AS RowNo
    FROM @Data
    )
    
    SELECT ID, X, Y FROM CTE WHERE RowNo = 1
    

    したがって、 ROW_NUMBER()> 各行に増分番号を割り当て、新しいX値ごとに1にリセットします。 Xの値が同じ行の場合、行番号はYDESCENDINGとIDASCENDINGの順に増分的に割り当てられます。したがって、特定のX値の場合、行番号1はY値が最も高くID値が最も低い行に割り当てられます。次に、RowNoが1であるもののみを返すように制限を追加します。



    1. 非論理的にフォーマットされた日付間の変換(/ slash /を-dash-に変更)

    2. MySQLクエリ:1年より古いすべてのエントリをクエリする

    3. sqlalchemy postgresqlここで、int =string

    4. この複雑なEAVMYSQLクエリを最適化する方法は?