oracle SQL中的前三个月

时间:2012-03-02 14:05:12

标签: sql oracle

我有以下的sql,它给我一份关于人员最后整整三个月处理的档案的报告,但我想采用它以便我从前三个月获得那些,例如当我现在运行它我应该得到2011年10月11日和12日的档案以及2012年1月2日和3日的4月份的档案。有人可以提出如何以最简单的方式处理这个问题的建议。这些报告作为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

编辑:

此处查询增强了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 

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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