0

我想在 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....

提前致谢

4

2 回答 2

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

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

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

于 2013-09-19T14:14:47.447 回答
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' )
于 2013-09-19T12:46:16.157 回答