我正在处理一个输出网格以用于制图的存储过程。用户可以输入间隔以天,周,月等显示图表。驱动此网格的数据在名为moddate的列中有一堆时间戳。为了分组,我正在使用:
DATEADD(<interval>, datediff(<interval>, 0, moddate), 0)
天,月,季度和年都一切正常。然而,周数包括上周日。例如,以下select语句给出了2017-04-03的答案:
select "start_of_week" = dateadd(week, datediff(week, 0, '2017-04-02 00:00:00.000'), 0);
start_of_week:
'2017-04-03 00:00:00.000'
Changning @@ datefirst不会影响结果。
我想我的问题有两个:
提前感谢您的帮助。
答案 0 :(得分:0)
我最终在select和group中使用了CASE:
SELECT CASE
WHEN @interval = 'week'
THEN DATEADD(<interval>, DATEDIFF(day, 0, moddate)/7, 0)
ELSE DATEADD(<interval>, DATEDIFF(<interval>, 0, moddate), 0)
END as moddate,
fullname,
isnull(totals, 0) as totals
FROM #results
GROUP BY CASE
WHEN @interval = 'week'
THEN DATEADD(<interval>, DATEDIFF(day, 0, moddate)/7, 0)
ELSE DATEADD(<interval>, DATEDIFF(<interval>, 0, moddate), 0)
END, fullname
关键的一点是在小组中再次使用案例。
我感谢{7}}获得/ 7位,因为减去7会使每个答案减少一周。