对不起,如果这是重复的,但我一直在寻找一个小时,还没有找到解决方案。
如果我有以下查询:
SELECT
[Count]=COUNT([d.ccode])
,[Code]=([d.ccode])
FROM lntmuid.document d
WHERE (DateDiff(WEEK, [d.date], GETDATE()) = 237)
AND staff = 'MF'
AND ccode = 'SUM'
GROUP BY d.ccode
这给了我一周的记录数。我是否可以生成如下记录集:
╔═════════╦═══════╗
║ Week Of ║ Count ║
╠═════════╬═══════╣
║ 1/1/10 ║ 100 ║
║ 1/7/10 ║ 50 ║
║ 1/14/10 ║ 80 ║
║ 1/21/10 ║ 70 ║
║ 1/28/10 ║ 120 ║
║ etc … ║ ║
╚═════════╩═══════╝
感谢您的帮助
答案 0 :(得分:1)
您可以使用以下方式获取一周的第一天:
SELECT DATEADD(WEEK, DATEDIFF(WEEK, '19000101', GETDATE()), '19000101');
逻辑只是获取给定日期(上面的GETDATE())和固定日期之间的周数,然后将该周数添加回固定日期,因为DATEDIFF
只计算周界限它将为您提供给定日期的一周的第一天。
然后您只需要将日期字段替换为上述字段,并将表达式添加到group by子句中:
SELECT WeekOf = DATEADD(WEEK, DATEDIFF(WEEK, '19000101', [d.date]), '19000101')
,[Count]=COUNT([d.ccode])
FROM lntmuid.document d
WHERE staff = 'MF'
AND ccode = 'SUM'
GROUP BY DATEADD(WEEK, DATEDIFF(WEEK, '19000101', [d.date]), '19000101');
您还会看到此方法用作:
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0);
这完全相同,但使用0到1900-01-01
的隐式转换,而不是显式输入以节省一点时间。我倾向于在我的代码中使用这种方法,但感觉使用日期使得Stackoverflow上的答案更加清晰。