我有以下要求。
假设我在15-APR-2019
上运行查询,则应该获取4th quarter 2018(01-OCT-18 to 31-DEC-18)
的数据。如果我在15-MAY-2019
上运行查询,我应该得到1st quarter of 2019(01-JAN-2019 to 31-MAR-2019)
的数据。
表示如果季度末数据与当前日期相差30天,那么我应该获得上一季度的数据。但是如果相差少于30天,我应该获取上一季度的数据。
表示
I run on 15-APR-2019 data should be of (01-OCT-2018 to 31-DEC-2018)
I run on 01-APR-2019 data should be of (01-OCT-2018 to 31-DEC-2018)
I run on 01-MAY-2019 data should be of (01-JAN-2019 to 31-MAR-2019)
I run on 01-JUN-2019 data should be of (01-JAN-2019 to 31-MAR-2019)
如何将此标准放在where子句中。我们必须根据sysdate
计算数据,并且必须按存储在数据库中的日期进行比较。
答案 0 :(得分:2)
类似这样的东西:
select trunc(sysdate - 30, 'Q') - interval '3' month
如果您需要完整的数据:
where date >= trunc(sysdate - 30, 'Q') - interval '3' month and
date < trunc(sysdate - 30, 'Q')
答案 1 :(得分:2)
with s as
(select date '2019-04-15' dt from dual union all
select date '2019-04-01' dt from dual union all
select date '2019-05-01' dt from dual union all
select date '2019-06-01' dt from dual
)
select dt, d1, add_months(d1, 3) - 1 d2
from
(select dt, add_months(trunc(dt, 'q'), case when dt - trunc(dt, 'q') < 30 then -6 else -3 end) d1
from s
);
DT D1 D2
------------------- ------------------- -------------------
2019-04-15 00:00:00 2018-10-01 00:00:00 2018-12-31 00:00:00
2019-04-01 00:00:00 2018-10-01 00:00:00 2018-12-31 00:00:00
2019-05-01 00:00:00 2019-01-01 00:00:00 2019-03-31 00:00:00
2019-06-01 00:00:00 2019-01-01 00:00:00 2019-03-31 00:00:00