【发布时间】:2019-02-24 23:09:03
【问题描述】:
我正在尝试通过以下方式将我的数据库中的数据与 Thurs->Fri 分开:
(Get last 10 weeks of data, grouped by Fri->Thurs as a week) e.g if today was 8/13/2018:
From (Fri) To (Thur)
---------------------
8/10/2018 8/16/2018
8/3/2018 8/9/2018
7/27/2018 8/2/2018
7/20/2018 7/26/2018
7/13/2018 7/19/2018
7/6/2018 7/12/2018
6/29/2018 7/5/2018
6/22/2018 6/28/2018
6/15/2018 6/21/2018
6/8/2018 6/14/2018
我尝试通过编写查询来做到这一点(比我喜欢的要复杂):
WITH Vars (d)
AS (
SELECT DATEADD(week,-9, (DATEADD(day, - ((Datepart(WEEKDAY,GETDATE()) +1) % 7) , GETDATE())) ) As 'd'
)
SELECT WeekNum+1 As [WeekNum], Count(*) Count
FROM
(
SELECT (Datepart(Week, (DATEADD(day, - ((Datepart(WEEKDAY,t.DateField)+1 ) % 7), t.DateField)) ) )as WeekNum
FROM Table as t
WHERE (SELECT d FROM Vars) <= t.DateField
) as table
GROUP BY WeekNum
ORDER BY WeekNum ASC
但是它分组的日期是错误的
如何修改查询以返回正确的数据?
注意如果可能的话,我希望这是一个查询而不是任何类型的存储过程。
【问题讨论】:
-
你有日历表吗?如果是这样,它很可能会让事情变得更容易。
-
@Larnu Il 实际上对此进行了调查。它会让事情变得更容易,特别是考虑到我必须在一个事务(查询)中写这个
标签: sql-server sql-server-2005 sql-date-functions