【发布时间】:2015-10-29 17:56:20
【问题描述】:
我正在尝试汇总总工作时间并按周分组。我的一周从周一开始,到周日结束。我遇到的问题是数字总是第一周的,但其余几周都很好。第一周的问题总是很低。
查看快照
这是我的代码
SELECT
UID,
CONVERT(VARCHAR, x.WeekBeginDate, 101) as WeekBeginDate,
x.TOTAL_HOURS
FROM
(SELECT
UID,
DATEADD(DD, CONVERT(INT, (DATEDIFF(DD, '1/1/1900', t.DT)/7)) * 7, '1/1/1900') [WeekBeginDate],
SUM(HOURS) AS TOTAL_HOURS
FROM
myTable t
WHERE
UID = 'test1'
AND DT >= DATEADD(WEEK, -6, GetDate())
GROUP BY
UID, CONVERT(INT, DATEDIFF(DD, '1/1/1900', t.DT)/7) ) x
ORDER BY
1
【问题讨论】:
-
您可以使用 DATEPART(wk) 而不是将天除以 7。
-
那不是因为你的开始时间是DATEADD(WEEK, -6, GetDate()),不是星期一,而是6周前的任何时间,包括小时和分钟跨度>
-
创建一个日历表并通过连接计算,而不是那个超级语句。你会惊讶于事情是如何被简化的。
标签: sql sql-server sql-server-2008 tsql