显示几周查询

时间:2015-03-24 14:12:44

标签: sql-server tsql

对不起,如果这是重复的,但我一直在寻找一个小时,还没有找到解决方案。

如果我有以下查询:

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 …   ║       ║
╚═════════╩═══════╝ 

感谢您的帮助

1 个答案:

答案 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上的答案更加清晰。