Oracle TRUNC每季度一次但自定义年份开始日期
我需要每季度获取一次聚合值,可以使用带有'Q'选项的trunc函数来完成
select count(*), trunc(DATE_COL, 'Q') from TABLE_NAME
group by trunc(DATE_COL, 'Q')
但问题在于,我需要在去年的12月1日开始,而不是1月1日开始(例如:2015年第一季度开始于2014年12月1日,结束于2015年2月28日,而不是1 - 2015年1月至2015年3月31日)。 补充:因此Q1包括12月,1月,2月; Q2包括3月,4月,5月; Q3包括6月,7月,8月; 第四季度包括9月,10月,11月
PS:我使用的是Oracle 11g,我将通过PHP 5.3运行这些查询。
在我看来你有几个问题在这里。
1)要将12月的日期推入本地Q1捆绑包,请使用add_months(:date,1)。 通过将您的偏移量移至Oracle的Q1,2,3,4以便轻松汇总。
2)标签。 如果您需要查询做动态标签,那么APC和Lalit会为您找到正确的开始日期。 从那里,last_day(add_months(Quarter_start_date,3))会让你成为另一个端点!
3)好的,那么你是否正在寻找每季度一行的回报? 或者每四年一列,每行一列? 如果每季度有一行需要确保您返回一个没有数据存在的季度行吗?
但是要按季度做一个简单的聚合,并保留一个月的偏移量:
SELECT count(*)
, add_months(trunc(add_months(your_date_field,1),'Q'),-1) q_start_date
FROM YOUR_TABLE
GROUP BY add_months(trunc(add_months(your_date_field,1),'Q'),-1);
“我需要在去年的12月1日开始,而不是1月1日开始(例如:2015年第一季度开始于2014年12月1日,结束于2015年2月28日)
好吧,所以你想把所有的宿舍都换一个月。 这很简单:使用ADD_MONTHS()和负数来减去一个月....
select count(*), add_months(trunc(DATE_COL, 'Q'), -1) Q
from TABLE_NAME
group by add_months(trunc(DATE_COL, 'Q'), -1)
ADD_MONTHS()是一个标准的Oracle函数。 了解更多。
我需要在去年的12月1日开始,而不是1月1日开始(例如:2015年第一季度开始于2014年12月1日
要获得当前季度的1-DEC-2014而不是1-JAN-2015,您可以将本季度的某一天转回,然后获得该月的第一天。
使用ADD_MONTHS 更新 @ APC的解决方案比使用TRUNC两次更好,更整洁。 我建议使用他的解决方案。 矿可能是一种选择,只是很好知道。
例如,
SQL> SELECT trunc(trunc(SYSDATE, 'Q') - 1, 'month') Q1 FROM dual;
Q1
---------
01-DEC-14
SQL>
尝试,
SELECT COUNT(*),
TRUNC(TRUNC(DATE_COL, 'Q') - 1, 'month') Q1
FROM TABLE_NAME
GROUP BY TRUNC(TRUNC(DATE_COL, 'Q') - 1, 'month');
链接地址: http://www.djcxy.com/p/65611.html
上一篇: Oracle TRUNC date by quarter but with custom year start date