1

问题

我有一张桌子,我需要使用以下规则进行选择,

  1. AUFT_LOESCH_KZ不能为空
  2. AUFT_AUFT_ART必须是 E
  3. AUFT_FZG_ART可以是 0,1,2,E,F 或 G
  4. 如果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
4

0 回答 0