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

行方向の最大値(n列の)-エレガントなアプローチ

    PostgreSQLでは、GREATESTを使用できます 式:

    SELECT GREATEST(date_1, date_2, date_3, date_4, date_5, date_6) AS max_date
    ...
    

    これは標準のSQLではないため、他のデータベースでは機能しない可能性があります。

    とにかく、2番目のWHEN以降、比較の数を減らすことができます。 CASEの表現 ステートメントは、最初のステートメントがTRUEではなかった場合にのみテストされます :

    CASE
       WHEN date_1 >= date_2 AND date_1 >= date_3 AND date_1 >= date_4 AND date_1 >= date_5 AND date_1 >= date_6
       THEN date_1
       WHEN date_2 >= date_3 AND date_2 >= date_4 AND date_2 >= date_5 AND date_2 >= date_6
       THEN date_2
       WHEN date_3 >= date_4 AND date_3 >= date_5 AND date_3 >= date_6
       THEN date_3
       WHEN date_4 >= date_5 AND date_4 >= date_6
       THEN date_4
       WHEN date_5 >= date_6
       THEN date_5
       ELSE date_6
    END
    

    あなたがそれをよりエレガントだと思うかどうかはわかりませんが、ANDの代わりに ALLを使用することもできる句 VALUESを使用 式:

    WHEN date_1 >= ALL (VALUES (date_2), (date_3), (date_4), (date_5), (date_6))
    THEN date_1
    ...
    


    1. OracleSEQUENCE.CodeIgniterのCurrval問題

    2. MySQLでutf8mb4を使用する

    3. SQLでのパーティショニングの正しい構文は何ですか

    4. PostgREST/PostgreSQL文字列バッファメッセージを拡大できません