如何显示给定日期范围的每周数据

时间:2013-09-19 12:31:14

标签: sql oracle

我希望在oracle中以周为单位显示给定日期范围之间的所有数据(计数)。

Select count(log.end_date) 
  from tablename 
 where log.end_date between '01-Jul-2013' AND '30-Jul-2013'

日期范围可以在几个月之间,例如 - 2013年6月1日至2013年7月30日。

我该如何显示?

Count    Week

23      wk1 
45      wk2 
67      wk3 
34      wk4 
78      wk5   
and so on....

提前致谢

2 个答案:

答案 0 :(得分:1)

查看此网站并搜索IW (ISO week)

您可以将您的陈述改为:

SELECT   count(log.end_date) Count,
         to_char( date log.end_date, 'IW' ) Week
FROM     tablename 
WHERE    log.end_date between '01-Jul-2013' AND '30-Jul-2013'
GROUP BY to_char( date log.end_date, 'IW' )

编辑:

没有将问题的一部分纳入我的查询中。这是一个更新版本,它减去第一周的ISO周,并添加一个来获得wk1,wk2,wk3 ......

SELECT   count(log.end_date) Count,
         'wk' || (1 + to_char( date log.end_date, 'IW' ) - to_char( date '01-Jul-2013', 'IW')) Week
FROM     tablename 
WHERE    log.end_date between '01-Jul-2013' AND '30-Jul-2013'
GROUP BY to_char( date log.end_date, 'IW' )

答案 1 :(得分:1)

您正在寻找IW或WW格式的to_char。你也在寻找本周的分组方式:

select count(*), to_char(end_date,'IW')
from tablename 
where trunc(end_date) between to_date('01-07-2013','dd-mm-yyyy') and to_date('30-07-2013','dd-mm-yyyy')
group by to_char(end_date,'IW')
order by to_char(end_date,'IW');

来自Oracle http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm

  

基于ISO标准的IW周(1-52或1-53)。

     

一年中的WW周(1-53),其中第1周从一年的第一天开始,一直持续到一年的第七天。