2012-03-02 80 views
1

我有以下的sql,它給了我最後一整個三個月的人處理的檔案報告,但我想採用它,以便從前三個月獲得這些,例如,當我運行現在我應該從2011年10月11日和12日以及2012年1月2日和3日的4月份獲得檔案。有人可以提出一個建議,說明如何處理這個最簡單的方法。這些報告作爲sql存儲在數據庫中,因此它們應該能夠隨時運行。在oracle中的前三個月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 

編輯:

這裏由約阿希姆

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 2012-03-02 14:48:57

+0

工程就像一個魅力,感謝約阿希姆。我對這個查詢的輸出有另一個疑問,但是我會把它作爲一個新問題 – peter 2012-03-05 10:00:00

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

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

+0

評論不是英文的......你能解決這個問題嗎? – 2015-04-06 22:07:28