请教一个按周分组的问题

xiaofeng3385 2009-02-16 01:34:37
请问下,想用一个SQL实现按周分组功能.
给定一段时间,我想以开始时间(开始日期不管周几都可以)按周分组,例如给定09年2月3号到2月23号,那么就按3号到9号,10号到16号...这么分组统计
不知是否可以实现下面这样,统计值为零的也占一行

周数 日期 统计值
1 02/03-02/09 0
2 02/10-02/16 100
3 ...


多谢
...全文
202 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allan_xd 2009-03-02
  • 打赏
  • 举报
回复
如果还要出现统计值为0的行的话就这样写:
select a."周数",to_char(:start_date + a."周数" * 7 - 7,'mm/dd')||'-'||to_char(:start_date + a."周数" * 7 - 1,'mm/dd') as "日期",nvl("统计值",0) as "统计值" from
(select rownum as "周数" from yourtable where rownum <= ceil((:end_date - :start_date) / 7)) a,
(select ceil((createtime - :start_date) / 7) as "周数",count(*) as "统计值" from yourtable group by ceil((createtime - :start_date) / 7)) b
where a."周数" = b."周数"(+);
上面语句不够精确,时间界线可能还有问题,你可微调一下。
另外如果你专门建一个周数表就不用从yourtable中选rownum了。
Allan_xd 2009-03-02
  • 打赏
  • 举报
回复
select ceil((createtime - :start_date) / 7) as "周数",to_char(:start_date + ceil((createtime - :start_date) / 7) - 1,'mm/dd')||'-'||to_char(:start_date + ceil((createtime - :start_date) / 7) + 6,'mm/dd') as "日期",count(*) as "统计值" from yourtable where createtime >= :start_date and createtime <= :end_date group by ceil((createtime - :start_date) / 7);
看这个行不行,如果start_date参数类型不对,可用to_date函数转换一下
行舟 2009-03-02
  • 打赏
  • 举报
回复
select distinct to_char(to_date('year-month-day hour:minute:second','yyyy-mm-dd'),'yyyy-ww') from xxx_tbl;
Andy__Huang 2009-02-16
  • 打赏
  • 举报
回复
这里还有一个参考例子:
http://www.itpub.net/thread-588185-1-1.html
Andy__Huang 2009-02-16
  • 打赏
  • 举报
回复
SELECT to_char(日期,'yyyymm') 年月,'第'||to_char(日期,'w')||'周' 周,
COUNT(*) 统计值
FROM tb
GROUP BY to_char(日期,'yyyymm'),to_char(日期,'w');
Andy__Huang 2009-02-16
  • 打赏
  • 举报
回复
参考:
很急的问题 按周统计和按月统计的问题
http://topic.csdn.net/t/20060223/15/4573067.html

yzbf 2009-02-16
  • 打赏
  • 举报
回复
Select Weeks 周数
,to_char(To_Date('2009-02-03', 'YYYY-MM-DD') + 7 * (Weeks - 1),'MM/DD')||'-'||to_char(To_Date('2009-02-03', 'YYYY-MM-DD') + 7 * Weeks-1 ,'MM/DD') 日期
,Sumresults 统计值
From (Select Trunc((Hiredate - To_Date('2009-02-03', 'YYYY-MM-DD')) / 7) + 1 Weeks
,Sum(Empno) Sumresults
From Scott.Emp
Group By Trunc((Hiredate - To_Date('2009-02-03', 'YYYY-MM-DD')) / 7) + 1);


以上sql在Scott用户下调试过。
Hiredate换成你需要计算的日期字段,empno换成你需要计算的字段,from 子句换成你的表和查询条件。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧