Данные предыдущих кварталов на основе sysdate - PullRequest
0 голосов
/ 13 мая 2019

У меня ниже требования.

Предположим, что я запускаю запрос на 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 и сравнить их с датой, хранящейся в базе данных.

Ответы [ 2 ]

2 голосов
/ 13 мая 2019
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
2 голосов
/ 13 мая 2019

Примерно так:

select trunc(sysdate - 30, 'Q') - interval '3' month

Если вам нужны полные данные:

where date >= trunc(sysdate - 30, 'Q') - interval '3' month and
      date < trunc(sysdate - 30, 'Q')
...