Пример: мне нужна недельная сумма заявок для zone2 с 01.06.2010 по 24.06.2010.
Этот T-SQL должен это сделать:
(Я держал дату в одном месте, потому что «гггг-мм-дд» не является независимым от языка форматом даты.)
DECLARE
@StartDate DATETIME,
@EndDate DATETIME,
@TargetZone INT
SET @StartDate = '2010-06-01'
SET @EndDate = '2010-06-24'
SET @TargetZone = 2
SELECT
SUM (dwd.TotalSubmissions) AS TotalSubmissions,
dwd.ZoneID,
DATEPART (week, dwd.ReportDate) AS WeekOfTheYear
FROM
(
SELECT
r.TotalSubmissions,
r.ZoneID,
CAST ( (CAST (r.RptYear AS varchar(4)) + '-' + CAST (r.RptMonth AS varchar(2)) + '-' + CAST (r.RptDay AS varchar(2))) AS DATETIME) AS ReportDate
FROM
Reports r
WHERE
r.ZoneID = @TargetZone
)
AS dwd
WHERE
dwd.ReportDate >= @StartDate
AND
dwd.ReportDate <= @EndDate
GROUP BY
dwd.ZoneID,
DATEPART (year, dwd.ReportDate),
DATEPART (week, dwd.ReportDate)
Образцы данных:
CREATE TABLE Reports
(
TotalSubmissions INT,
ZoneID INT,
RptMonth INT,
RptDay INT,
RptYear INT
)
INSERT INTO
Reports (TotalSubmissions, ZoneID, RptMonth, RptDay, RptYear)
SELECT
2, 1, 6, 1, 2010 UNION ALL SELECT
1, 1, 6, 2, 2010 UNION ALL SELECT
1, 1, 6, 3, 2010 UNION ALL SELECT
1, 2, 6, 1, 2010 UNION ALL SELECT
1, 2, 6, 2, 2010 UNION ALL SELECT
2, 2, 6, 3, 2010 UNION ALL SELECT
1, 2, 6, 4, 2010 UNION ALL SELECT
1, 4, 6, 1, 2010 UNION ALL SELECT
1, 4, 6, 3, 2010 UNION ALL SELECT
1, 4, 6, 4, 2010
INSERT INTO Reports (TotalSubmissions, ZoneID, RptMonth, RptDay, RptYear)
SELECT TotalSubmissions, ZoneID, RptMonth, RptDay+10, RptYear
FROM Reports
INSERT INTO Reports (TotalSubmissions, ZoneID, RptMonth, RptDay, RptYear)
SELECT TotalSubmissions, ZoneID, RptMonth, RptDay+20, RptYear
FROM Reports
DELETE FROM Reports
WHERE RptDay > 30