您的位置:首页 > 数据库 > Oracle

Oracle按不同时间分组统计

2014-12-26 15:00 183 查看
1、按年

select to_char(record_date,'yyyy'), sum(col_8) as total_money
from table_name
where group by to_char(record_date,'yyyy')


2、按月

select to_char(record_date,'yyyy-mm'), sum(col_8) as total_money
from table_name
where group by to_char(record_date,'yyyy-mm')


3、按季

select to_char(record_date,'yyyy-Q'), sum(col_8) as total_money
from table_name
where group by to_char(record_date,'yyyy-Q')


4、按周

select to_char(record_date,'yyyy-IW'), sum(col_8) as total_money
from table_name
where group by to_char(record_date,'yyyy-IW')


5、按小时

select to_char(record_date,'yyyy-mm-dd hh24'), sum(col_8) as total_money
from table_name
where group by to_char(record_date,'yyyy-mm-dd hh24')


6、按分钟

select to_char(record_date,'yyyy-mm-dd hh24:mi'), sum(col_8) as total_money
from table_name
where group by to_char(record_date,'yyyy-mm-dd hh24:mi')


7、按5分钟

SELECT trunc(sysdate) + (ROWNUM - 1) / 24/12 AS STAT_TIME
FROM DUAL
CONNECT BY ROWNUM <=(trunc(sysdate, 'MI') - (trunc(sysdate))) * 24 * 12


按5分钟统计,中间没数据的时间会缺少
select to_char(j.record_date,'yyyymmdd') as st_date
, sum(j.col_8*j.col_9*j.col_10) as mer_value
, to_char(j.record_date,'hh24') as STAT_HOUR
, floor(to_char(j.record_date,'mi')/5) as min_flag
, '昨日' as report_name
from c ,  j
where c.col_4 = j.col_4 and c.col_5 = j.col_5 and c.col_6 = j.col_6
and j.actiontype = 217
and j.record_date between trunc(sysdate-1) and trunc(sysdate)
group by to_char(j.record_date,'yyyymmdd'), to_char(j.record_date,'hh24'), floor(to_char(j.record_date,'mi')/5)
ORDER BY st_date, STAT_HOUR, min_flag


8、按十分钟

SELECT trunc(sysdate) + (ROWNUM - 1) / 24/6 AS STAT_TIME
FROM DUAL
CONNECT BY ROWNUM <=(trunc(sysdate, 'MI') - (trunc(sysdate))) * 24 * 6


按5分钟统计,把时间转换成分钟准点函数

create or replace function trunc_minute(v_date date) return date as

begin
return to_number(trunc(to_char(v_date, 'mi')/5))*5/(24*60) + trunc(v_date, 'hh24');
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: