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

インタビューの質問:列レベルで過去3か月の集計を取得するにはどうすればよいですか?

    まず、月のデータを合計してから、LAG関数を使用して、次のように前の月のデータを取得する必要があります。

    SELECT
        ORDER_MONTH,
        LAG(UNIT_OF_PHONE_SALE, 1) OVER(
            ORDER BY
                ORDER_MONTH
        ) AS "M-1_Sale",
        LAG(UNIT_OF_PHONE_SALE, 2) OVER(
            ORDER BY
                ORDER_MONTH
        ) AS "M-2_Sale",
        LAG(UNIT_OF_PHONE_SALE, 3) OVER(
            ORDER BY
                ORDER_MONTH
        ) AS "M-3_Sale"
    FROM
        (
            SELECT
                TO_CHAR(ORDERDATE, 'YYYYMM') AS ORDER_MONTH,
                SUM(UNIT_OF_PHONE_SALE) AS UNIT_OF_PHONE_SALE
            FROM
                DATAA
            GROUP BY
                TO_CHAR(ORDERDATE, 'YYYYMM')
        )
    ORDER BY
        ORDER_MONTH DESC;
    

    出力:

    ORDER_   M-1_Sale   M-2_Sale   M-3_Sale
    ------ ---------- ---------- ----------
    201908       3789        789        666
    201907        789        666        765
    201906        666        765
    201905        765
    201904
    

    db<>フィドルデモ

    乾杯!!

    -更新-

    コメントに記載されている要件については、次のクエリが機能します。

    CTE AS (
        SELECT
            TRUNC(ORDERDATE, 'MONTH') AS ORDER_MONTH,
            SUM(UNIT_OF_PHONE_SALE) AS UNIT_OF_PHONE_SALE
        FROM
            DATAA
        GROUP BY
            TRUNC(ORDERDATE, 'MONTH')
    )
    
    SELECT
        TO_CHAR(C.ORDER_MONTH,'YYYYMM') as ORDER_MONTH,
        NVL(C1.UNIT_OF_PHONE_SALE, 0) AS "M-1_Sale",
        NVL(C2.UNIT_OF_PHONE_SALE, 0) AS "M-2_Sale",
        NVL(C3.UNIT_OF_PHONE_SALE, 0) AS "M-3_Sale"
    FROM
        CTE C
        LEFT JOIN CTE C1 ON ( C1.ORDER_MONTH = ADD_MONTHS(C.ORDER_MONTH, - 1) )
        LEFT JOIN CTE C2 ON ( C2.ORDER_MONTH = ADD_MONTHS(C.ORDER_MONTH, - 2) )
        LEFT JOIN CTE C3 ON ( C3.ORDER_MONTH = ADD_MONTHS(C.ORDER_MONTH, - 3) )
    ORDER BY
        C.ORDER_MONTH DESC
    

    出力:

    db<>フィドルデモ 更新された回答の。

    乾杯!!



    1. AndroidでのDriverManager.getConnection()でのUnsupportedOperationException

    2. mysqlの実際のエスケープ文字列を使用するにはどうすればよいですか?

    3. 挿入された出力値をSQLサーバーの変数に割り当てるにはどうすればよいですか?

    4. XAMPPでFEDERATEDエンジンを有効にする方法