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

別の列で最大列値グループの行を選択

    私はこれに何度も苦労してきましたが、解決策はクエリについて別の方法で考えることです。

    Del_IndexがそのDocGroupViewIDを持つすべての行の最高(最大)である各DocGroupViewID行が必要です:

    SELECT
        T.DocGroupViewID,
        T.Del_Index,
        T.ID
    FROM MyTable T
    WHERE T.Del_Index = (
        SELECT MAX( T1.Del_Index ) FROM MyTable T1
        WHERE T1.DocGroupViewID = T.DocGroupViewID 
    )
    

    複数の行が同じDel_Indexを持つことができる場合、より複雑になります 、それ以来、表示するものを選択する方法が必要です。

    編集:別のオプションでフォローアップしたかった

    RANK()を使用できます またはROW_NUMBER() 次のように、CTEと連携して、結果をより詳細に制御できます。

    -- fake a source table
    DECLARE @t TABLE (
        ID int IDENTITY(1,1) PRIMARY KEY,
        Del_Index int,
        DocGroupViewID int
    )
    
    INSERT INTO @t
    SELECT 1, 1 UNION ALL
    SELECT 2, 1 UNION ALL
    SELECT 3, 1 UNION ALL
    SELECT 1, 2 UNION ALL
    SELECT 2, 2 UNION ALL
    SELECT 2, 2 UNION ALL
    SELECT 1, 3 UNION ALL
    SELECT 2, 3 UNION ALL
    SELECT 3, 3 UNION ALL
    SELECT 4, 3
    
    -- show our source
    SELECT * FROM @t
    
    -- select using RANK (can have duplicates)
    ;WITH cteRank AS
    (
        SELECT
            DocGroupViewID,
            Del_Index,
            ID,
            RANK() OVER
                (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
            AS RowRank,
            ROW_NUMBER() OVER
                (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
            AS RowNumber
        FROM @t
    )
    SELECT *
    FROM cteRank
    WHERE RowRank = 1
    
    -- select using ROW_NUMBER
    ;WITH cteRowNumber AS
    (
        SELECT
            DocGroupViewID,
            Del_Index,
            ID,
            RANK() OVER
                (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
            AS RowRank,
            ROW_NUMBER() OVER
                (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
            AS RowNumber
        FROM @t
    )
    SELECT *
    FROM cteRowNumber
    WHERE RowNumber = 1
    

    同点を整理する方法がある場合は、それをORDER BYに追加するだけです。 。



    1. データベースが定期的にバックアップされるようにする方法

    2. XAMPPを使用してmysqlでエラー2でスタック

    3. 列のPHPMYSQLPDO SUM

    4. postgreSQLの左側にゼロを埋める