Sql 如何显示给定日期范围的每周数据
我想在oracle中以周为单位显示给定日期范围内的所有数据(计数)Sql 如何显示给定日期范围的每周数据,sql,oracle,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
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....
提前感谢查看此网站并搜索
IW(ISO周)
您可以将您的声明更改为以下内容:
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' )
您正在寻找IW或WW格式的to_字符。您还将在本周前寻找分组方式:
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:
IW一年中的一周(1-52或1-53),基于ISO标准
WW一年中的一周(1-53),其中第一周从一年中的第一天开始,持续到一年中的第七天
你对一周的定义是什么?一周可以从周一到周日或周日到周六。这真的没关系——可以被视为周一到周日,但计数应该从第1周、第2周开始……等等。ThanksHow您是否定义了第一周?假设日期范围为2013年6月1日至2013年6月8日,星期为星期六。第一周的日期为01(星期三)、02(星期四)、03(星期五)、04(星期六),而日期为05(星期日)、06(星期一)、07(星期二)、08(星期三)在第二周内下降,以此类推……谢谢。因此,周的编号与数据中的第一周一致?该数据显示在ISO week-week of the year中。在尝试执行编辑版本时,我遇到了无效的数字错误。请尝试不同的计算,如
to_char(date log.end_date,'IW')-to_char(date'01-Jul-2013',IW'))
并报告发生的情况,以便让您知道我为什么更改where子句:1。trunc包含时间部分的日期(例如,2013年7月30日05:00不在2013年7月1日和2013年7月30日之间)。2.你相信甲骨文知道七月的意思。它在英语数据库上运行,但在另一个数据库上可能不运行(例如,在我的德国系统上,Oct将是Okt)。