2017-09-06 18 views
0

我有以下需求,下面的查询应该在3个条件下运行,每天,每周和每月运行3个条件: 。如何在DB2中获得第一个工作日

每日行应该给每天输出,每周应该给出 星期六输出。 而每月应该在第一个营业日给出产出,但如果第一个是周六,那么产出会到第三天,如果第一天是星期天,那么产出应该是第二天。

SELECT * FROM表名是给我下面的4行

Status ID COL1 COL2 
= = = = = = = = = = = = 
Daily 12 100 150.2 
Daily 17  90 120.6 
Weekly 24 180 50.6 
Monthly 25 150 155.2 

现在我想将此数据按上述要求

我通过以下SQL每日和每月拿到手精确输出但需要帮助每月

Select * from Tablename 
where 
ID in (12,17) OR --daily 
(DAYNAME(CURRENT DATE) = 'Saturday' AND ID = 24) --weekly 
(TO_CHAR(DATE(CURRENT DATE)) = '01' AND ID = 25 AND DAYNAME(CURRENT DATE) NOT IN ('Saturday','Sunday')) --monthly 

但我的月度逻辑不给我预期的产出。

回答

1

我注意到的第一件事是,在Weekly行末尾有一个OR缺失 - 我认为这只是一个错字。

虽然我认为'月度'这一行需要更复杂一点。尝试像这样: -

Select * from Tablename 
where 
ID in (12,17) OR --daily 
(DAYNAME(CURRENT DATE) = 'Saturday' AND ID = 24) OR --weekly 
(ID = 25 AND 
    (
     ( TO_CHAR(DATE(CURRENT DATE)) = '01' AND 
      (DAYNAME(CURRENT DATE) NOT IN ('Saturday','Sunday')) 
     ) 
     OR(TO_CHAR(DATE(CURRENT DATE)) IN ('02', '03') AND 
      (DAYNAME(CURRENT DATE) = 'Monday')) 
    ) 
) --monthly 
+0

谢谢......其预期工作.. ps:是的,这只是错字:) – goldenbutter

相关问题