按周统计

michael556cdj 2007-02-06 06:22:48
表a

aid int
aCount int
CountedTime datetime

里面有很多记录
我想得到按周统计结果
如下

beginday endtday sumCount
按照日历周 按照日历周 该周总计
的开始时间 的结束时间 该州总计
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南野鹤 2007-07-13
  • 打赏
  • 举报
回复
江南野鹤 2007-07-13
  • 打赏
  • 举报
回复
michael556cdj 2007-02-06
  • 打赏
  • 举报
回复
SELECT BeginTime = (SELECT MIN(CountedTime)), EndTime =(SELECT MAX(CountedTime)),SUM(aCount) AS SumCount
FROM a
GROUP BY DATENAME(ww,CountedTime)

可是得到的时间不是 一周的第一天 而是记录的最小一天
gc_ding 2007-02-06
  • 打赏
  • 举报
回复
--结果
/*
ID name beginday endtday sumCount
1 张三 2007-01-08 2007-01-14 500
1 张三 2007-01-15 2007-01-21 400
1 张三 2007-01-22 2007-01-28 500
1 张三 2007-01-29 2007-02-04 1300
1 张三 2007-02-05 2007-02-11 800
*/
gc_ding 2007-02-06
  • 打赏
  • 举报
回复
--假设以'2007-01-08'开始
declare @t table(ID int, name varchar(10), CountedTime datetime, aCount real)
insert @t
select 1, '张三', '2007-01-05', 100 union all
select 1, '张三', '2007-01-08', 200 union all
select 1, '张三', '2007-01-12', 300 union all
select 1, '张三', '2007-01-20', 400 union all
select 1, '张三', '2007-01-23', 500 union all
select 1, '张三', '2007-01-31', 600 union all
select 1, '张三', '2007-02-02', 700 union all
select 1, '张三', '2007-02-05', 800

select
id,name,
beginday=min(dateadd(wk,datediff(wk, '2007-01-08', CountedTime),'2007-01-08')),
endtday=min(dateadd(day,6,dateadd(wk,datediff(wk, '2007-01-08', CountedTime),'2007-01-08'))),
sumCount=sum(aCount)
from
@t
where
CountedTime >= '2007-01-08'
group by
id,name,datepart(week,CountedTime)

/*
ID name beginday endtday sumCount
1 张三 2007-01-08 2007-01-14
1 张三 2007-01-15 2007-01-21
1 张三 2007-01-22 2007-01-28
1 张三 2007-01-29 2007-02-04
1 张三 2007-02-05 2007-02-11
*/

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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