我有以下的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
答案 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。