Oracle按時間分組統計的sql

maojinyu發表於2011-03-31

oracle 實現按周,月,季度,年查詢統計資料

//按自然周統計
select to_char(date,'iw'),sum()
from
where
group by to_char(date,'iw')

//按自然月統計
select to_char(date,'mm'),sum()
from
where
group by to_char(date,'mm')

//按季統計
select to_char(date,'q'),sum()
from
where
group by to_char(date,'q')

//按年統計
select to_char(date,'yyyy'),sum()
from
where
group by to_char(date,'yyyy')

Oracle 中 IW和WW 有何差別

SQL> select day,


2 to_char(day, 'd'),


3 to_char(day, 'iw'),


4 to_char(day, 'ww')


5 from (select trunc(sysdate, 'year')+level-1 as day from dual connect by level <=8)


6 /





DAY TO_CHAR(DAY,'D') TO_CHAR(DAY,'IW') TO_CHAR(DAY,'WW')


----------- ---------------- ----------------- -----------------


2009-1-1 5 01 01


2009
-1-2 6 01 01


2009
-1-3 7 01 01


2009
-1-4 1 01 01


2009
-1-5 2 02 01


2009
-1-6 3 02 01


2009
-1-7 4 02 01


2009
-1-8 5 02 02
IW:ISO標準周
WW:oracle標準周
舉例:
SELECT to_char(to_date('20051203','yyyymmdd'),'WW') "WW03",
to_char(to_date('20051203','yyyymmdd'),'IW') "IW03",
to_char(to_date('20051204','yyyymmdd'),'WW') "WW04",
to_char(to_date('20051204','yyyymmdd'),'IW') "WW04",
to_char(to_date('20051205','yyyymmdd'),'WW') "WW05",
to_char(to_date('20051205','yyyymmdd'),'IW') "WW05"
FROM dual;

Oracle中發現的WW和IW的規律
WW:
每年的1月1日作為當年的第一週的第一天(不管當年的1月1日是星期幾);
比如:2004/01/01 是週四, 在Oracle中被定義為2004年WW的第一週的第一天;
SELECT TO_CHAR(TO_DATE('20040101','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040107','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040108','YYYYMMDD'),'YY:WW') FROM DUAL;

IW :
以周別為“主線” ,每年最多可以有53個周B別,但是每年至少要包含52個周別;
如果一年當中第52周別之後至當年的12月31日之間,還有大於或等於4天的話,則定為當年的第53周,否則剩餘這些天數被歸為下一年的第1周;如果在不 足52周別的話,則以下一年的時間來補;每週固定的從週一開始作為本週的第1天,到週日作為本週的第7天;比如:在Oracle中 2006/01/01 依然屬於IW周別 05年的第52周的第7天

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9907339/viewspace-1048055/,如需轉載,請註明出處,否則將追究法律責任。

相關文章