日期:2014-05-18  浏览次数:20379 次

用sql 统计 每一周的 数据
select 

DATEPART(yy,a.create_dt) AS '年', datepart(week,dateadd(day,-1,a.create_dt)) as 周,sum(fee_fact_all) AS '销售金额'
from tbOrder AS a INNER JOIN dbo.tbOrderDetail AS b ON a.id=b.order_id

WHERE b.product_id ='12212'

AND project_id='4' AND a.create_dt<>''

group by DATEPART(yy,a.create_dt),datepart(week,dateadd(day,-1,a.create_dt))

ORDER BY 1,2 asc



datepart(week,dateadd(day,-1,a.create_dt)) as 周 
 我减去1 的意思是 datepart 默认每周的周日 是第一天,我减去一 是不是周一是第一天?(第一个问题)

第二个问题:

为什么统计出来的数据 
年 周 金额
2012 1 100
2012 2 200
........
......
2012 21 400
2012 53 500

今天是本年的第21 周, 53 是年末 为什么 会有53周? 谢谢各位!

------解决方案--------------------
你减去一天没啥用啊,比如说select DATEPART(W,'2011-12-31'),恰好等于7
你减去一天,还是有六天在53周里面
------解决方案--------------------
為什麼要減1,按的你寫法2012-01-01,豈不是第53周內的。。。
------解决方案--------------------
周一为第一天是设置是 set datefirst 1
------解决方案--------------------
52周以后的日期 在当前年内,SQL SERVER 默认为第53周