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

Rank()SQLまたはそのようなもの

    LAGを使用する 分析関数:

    SELECT "Date",
           GREATEST(
             account_balance - LAG(account_balance, 1, 0) OVER (ORDER BY "Date"),
             0
           ) AS credit,
           GREATEST(
             LAG(account_balance, 1, 0) OVER (ORDER BY "Date") - account_balance,
             0
           ) AS debit,
           account_balance
    FROM   table_name
    

    サンプルデータの場合:

    CREATE TABLE table_name ( "Date", account_balance ) AS
    SELECT Date '2021-01-01', +1000 FROM DUAL UNION ALL
    SELECT Date '2021-01-02', + 500 FROM DUAL UNION ALL
    SELECT Date '2021-01-03', - 200 FROM DUAL;
    

    出力:

    反対方向に計算するには:

    SELECT "Date",
           credit,
           debit,
           SUM(credit-debit) OVER (ORDER BY "Date") AS account_balance
    FROM   table_name
    

    サンプルデータの場合:

    CREATE TABLE table_name ( "Date", credit, debit ) AS
    SELECT Date '2021-01-01', 1000,   0 FROM DUAL UNION ALL
    SELECT Date '2021-01-02',    0, 500 FROM DUAL UNION ALL
    SELECT Date '2021-01-03',    0, 700 FROM DUAL;
    

    出力:

    db <> fiddle こちら




    1. 同様の演算子を使用せずに、複数の単一または参照のデータを取得する

    2. プリペアドステートメントを使用してMySQL/PHPのフィールドをインクリメントする際の問題

    3. sql/oracleの電子メール/郵便番号フィールドの検証

    4. SQLステートメントでの減算