问题
我有一张桌子,我需要使用以下规则进行选择,
- AUFT_LOESCH_KZ不能为空
- AUFT_AUFT_ART必须是 E
- AUFT_FZG_ART可以是 0,1,2,E,F 或 G
- 如果AUFT_PAT(date) Year 与当前年份相同,那么我想选择所有以前的月份,而不是我们当前所在年份的月份
例子
如果AUFT_PAT年份为 2018 年且当前年份为 2018 年,那么我想根据MONTH(AUFT_PAT)选择之前的所有月份,直到 2018 年 1 月
以下查询有效,但它在大型机上占用了太多 CPU 时间,比如 50 分钟,甚至还没有接近完成
每个DBIN0XX有大约 20.000 个寄存器。
我对 DB2 场景还很陌生,所以我对如何优化它或如何分离查询没有很好的看法,任何帮助将不胜感激,因为它会直接影响我的开发。
DATEI01 SEL DBHOLDER AUFT_LOESCH_KZ IS NULL
AND AUFT_AUFT_ART IN ('E')
AND AUFT_FZG_ART IN ('0', '1', '2', 'E', 'F', 'G')
AND
(
AUFT_PAT <
(
SELECT
MIN(KALW_DATUM_JUL) PMON
FROM
D$DW7305.W73RKALW
WHERE
KALW_PMON = '+00'
)
AND SUBSTR(AUFT_PAT, 1, 4) YEAR = YEAR(CURRENT DATE) CURRENTYEAR
AND MONTH(CURRENT DATE) CURRENTMONTH > 1
)
OR
(
YEAR = CURRENTYEAR - 1
AND CURRENTMONTH = 1
)
OUT DBIN010
OUT DBIN020
OUT DBIN030
OUT DBIN040
OUT DBIN050
OUT DBIN060
OUT ZWAA071
OUT ZWAA090
OUT ZWAA150
OUT ZWAA200