2012-03-02 2 views
1

У меня есть следующий sql, который дает мне отчет о досье, обрабатываемом людьми последние полные три месяца, но я бы хотел его принять, чтобы получить те из предыдущего триместра, например, когда я буду запускать теперь я должен получать досье с 10, 11 и 12 месяцев 2011 года, а в апреле - с 1, 2 и 3 из 2012 года. Может кто-нибудь сделать предложение, как справиться с этим самым простым способом. Этот отчет хранится как sql в базе данных, чтобы они могли работать в любое время.предыдущий триместр в оракуле SQL

select 
pers_nr "person", 
to_char(import_dt,'YYMM') "year and month", 
count(pers_nr) "dossiers" 
from 
    rdms_3codon 
where 
to_char(import_dt,'YY')*12+to_char(import_dt,'MM') > to_char(sysdate,'YY')*12+to_char(sysdate,'MM')-4 
and to_char(import_dt,'YY')*12+to_char(import_dt,'MM') < to_char(sysdate,'YY')*12+to_char(sysdate,'MM') 
group by 
pers_nr, 
to_char(import_dt,'YYMM') 
order by 
pers_nr 

Edit:

Здесь запрос усиливается с предложением по Joachim

select 
pers_nr "person", 
to_char(import_dt,'YYMM') "year and month", 
count(pers_nr) "dossiers" 
from 
    rdms_3codon 
where 
trunc(import_dt) >= trunc(trunc(sysdate, 'Q') -1, 'Q') 
and trunc(import_dt) < trunc(sysdate, 'Q')-1/(24*60*60) 
group by 
pers_nr, 
to_char(import_dt,'YYMM') 
order by 
pers_nr 

ответ

5

Это то, что вы ищете?

SELECT TRUNC(TRUNC(SYSDATE, 'Q') -1, 'Q') AS startLastQuarter, 
     TRUNC(SYSDATE, 'Q')-1/(24*60*60) AS endLastQuarter, 
     TRUNC(SYSDATE, 'Q')    AS startThisQuarter  
FROM DUAL; 

Демо-версия here.

+0

Ваша техника кажется обнаженной, я попробую это в понедельник, должен уйти сейчас. – peter

+0

Работает как очарование, спасибо Иоахим. У меня есть еще один вопрос относительно вывода этого запроса, но я сделаю новый вопрос. – peter

0
SELECT TRUNC(add_months(SYSDATE,-3*N), 'Q') FROM DUAL; 

Remplace N por el numero de trimestre que quiere ir atras.

+0

Комментарий не на английском ... Не могли бы вы исправить это? –

Смежные вопросы