最近四季度的数据

时间:2019-04-16 10:23:36

标签: sql database oracle

我想获取包括当前季度在内的最近四个季度的数据。 假设如果我在30-MAR-2019上运行查询,那么我希望数据从01-APR-201831-MAR-2019 并且如果我在01-apr-2019上运行查询,那么我想要在01-JUL-201830-JUN-2019之间的数据

可以帮我吗

4 个答案:

答案 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;