我有以下要求,下面查询应该在3个条件下运行, 每日,每周和每月。
每日行应该每天输出, 每周应该只在星期六给出输出。 而每月应该在第一个工作日提供输出,但如果第一个是星期六,那么输出将是第3天,如果第一个是星期日,那么输出应该在第二天。
从表名中选择*给我的行数低于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
但我的每月逻辑没有给我预期的输出。
答案 0 :(得分:1)
我注意到的第一件事是在每周线的末尾有一个缺失的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