我希望在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....
提前致谢
答案 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周从一年的第一天开始,一直持续到一年的第七天。