ハードコードされた日付で実行された場合、テーブルに正しい数の行 (170K+) を挿入するクエリに問題があります。問題は、ハードコーディングされた日付を日付関数に置き換えることによって自動化しようとすると、クエリは新しく切り捨てられたテーブルに単一の行のみを挿入することです。
ハードコーディングされた日付の例: '20150401'
date 関数を使用した同じ日付のサンプル:
TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
上記の TO_CHAR 関数は、個別に実行すると、目的の結果を返します。
以下は、1 行が挿入されるクリーンアップされたクエリのバージョンです。
INSERT INTO SCHEMA.INSERT_TABLE(
SELECT TO_CHAR(now(), 'YYYYMM') TRAN_MONTH,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do stuff'
END) AS Stuff1,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do other stuff'
END) AS Stuff2,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do really weird stuff'
END) AS Stuff3,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do really really weird stuff'
END) AS Stuff4,
SUM(CASE WHEN A.CODE= 1
THEN 'Do ... '
END) AS Stuff5,
FROM
(SELECT Col1, Col2... FROM Table_A) A,
(SELECT Col1, Col2... FROM Table_B) B,
(SELECT Col1, Col2... FROM Table_C) C,
(SELECT Col1, Col2... FROM Table_D) D,
(SELECT Col1, Col2... FROM Table_E) E,
WHERE 'Conditions for A, B, C, D, and E are met'
AND B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1,'YYYYMMDD')
GROUP BY All of the things
ORDER BY Something
);
かなりのテストと調査を行いましたが、返されるレコードの量が大幅に異なる理由について考えられる原因は見つかりませんでした。
ありがとうございました、
ジャスティン