我使用 tsql 来总结每周数据(开始日期是星期一)。
上周跨越了 2012 年和 2013 年的边界,这意味着我每周得到两个总和。
有没有办法在 tsql 中对数据进行分组,以便我获得 2012-12-31 到 2013-01-06 的每周总和?

示例数据和sql:
http://sqlfiddle.com/#!6/52b25/13/0

下面没有链接示例。假设表只有一列,“创建”的日期时间类型。每周多少行?我想得到两个结果行,一个是 2012 年的最后一周,另一个是 2013 年开始的那一周(从 2012 年 12 月 31 日星期一开始)。

select
min(created) as 'First Date',
count(*) as 'Count',
datepart(wk,created) as 'Week Number'
from items
group by  datepart(wk,created), datepart(yy,created)
order by min(created)

最佳答案

一种解决方法是手动计算周数

select
min(created) as 'First Date',
count(*) as 'Count',
 datediff(dd,'2012-01-02',created)/7 AS week_number
from items
group by  datediff(dd,'2012-01-02',created)/7  -- You may replace '2012-01-02' to any date that is Monday (start day of the week)
order by min(created)

关于tsql - 如何在 SQL 中跨年按周分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14201989/

10-14 15:02