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

私の知性のためのサブクエリによる注文が多すぎます

    row_number()を使用できます 2回:

    select  *
    from    (
            select  *
            ,       row_number() over (partition by OT order by OI desc) as rn2
            from    (
                    select  *
                    ,       row_number() over (partition by EI, BI, OT 
                                               order by created_at desc) as rn1
                    from    Odds
                    where   EI = 1 -- for event 1
                    ) sub1
            where   rn1 = 1 -- Latest row per EI, BI, OT
            ) sub2
    where   rn2 = 1 -- Highest OI per OT
    

    しかし、テーブルが大きくなり続けると、パフォーマンスが低下します。 OddsHistoryのような履歴テーブルを追加し、古いOddをそこに移動することができます。最新のオッズのみがオッズテーブルにある場合、クエリははるかに簡単になります。

    SQLFiddleでの実例




    1. mysqlはアルファベット順にテーブルの列名を取得します

    2. java.sql.SQLException:ユーザーのアクセスが拒否されました

    3. 2つの同一のテーブルMySQLを比較する

    4. チェックボックスからのクエリ