我想获取包括当前季度在内的最近四个季度的数据。
假设如果我在30-MAR-2019
上运行查询,那么我希望数据从01-APR-2018
到31-MAR-2019
并且如果我在01-apr-2019
上运行查询,那么我想要在01-JUL-2018
和30-JUN-2019
之间的数据
可以帮我吗
答案 0 :(得分:1)
这将起作用:
select TRUNC(sysdate+1, 'Q') - interval '9' month,TRUNC(sysdate+1, 'Q') +
interval '3' month -1
from dual ;
01-JUL-2018 30-JUN-2019
select TRUNC(to_date('30-MAR-2019')+1, 'Q') - interval '9'
month,TRUNC(to_date('30-MAR-2019')+1, 'Q') + interval '3' month -1
from dual ;
01-APR-2018 31-MAR-2019
答案 1 :(得分:1)
棘手的部分是本季度的最后一天。
此解决方案通过从目标日期减去9个月,然后使用'Q'
掩码截断来计算范围的开始日期,该掩码给出了季度的第一天。然后,我们再次计算该日期 ,减去一天,然后加上十二个月,得出当前季度的最后一天:
with tgt as ( select date '2019-03-30' as dt from dual
union all select date '2019-02-28' as dt from dual
union all select date '2019-04-01' as dt from dual
)
select trunc(tgt.dt - interval '9' month, 'Q') as range_st,
(trunc(tgt.dt - interval '9' month, 'Q') - 1) + interval '12' month as range_end
from tgt
/
那里可能有个更好的解决方法,但这是我喝咖啡休息的结尾了:)
答案 2 :(得分:1)
这是动态的:
[
20: 'Jack',//20 is id from table and Jack is name from table
40: 'Nano',
49: 'Hakase'
]
答案 3 :(得分:0)
您可以这样做:
select (trunc(sysdate, 'Q') + interval '3' month) as next_quarter_start,
(trunc(sysdate, 'Q') + interval '15' month) - interval '1' day as next_quarter_end
from dual;