Я пытаюсь взять временные рамки, которые выбирает пользователь, а затем сгруппировать выборку по периодам времени — в данном случае: 2 недели.
Например, сегодня 04.05.2018, и если я установлю это в качестве даты начала и 31.05.2018 в качестве даты окончания, я получу следующее:
DECLARE @StartDate DATE ,
@EndDate DATE ,
@ToDate DATE;
SET @StartDate = GETDATE ();
SET @EndDate = '20180531';
SET @ToDate = DATEADD ( DAY, 1, @EndDate );
SELECT dd.Date ,
ROW_NUMBER () OVER ( ORDER BY DATEPART ( WEEK, dd.Date )) AS [rownumb]
FROM dbo.DateDimension AS [dd]
WHERE dd.Date >= @StartDate
AND dd.Date < @ToDate;
И результаты выглядят так:
Date rownumb
2018-05-04 1
2018-05-05 2
2018-05-06 3
2018-05-07 4
2018-05-08 5
2018-05-09 6
2018-05-10 7
2018-05-11 8
2018-05-12 9
2018-05-13 10
2018-05-14 11
2018-05-15 12
2018-05-16 13
2018-05-17 14
2018-05-18 15
2018-05-19 16
2018-05-20 17
2018-05-21 18
2018-05-22 19
2018-05-23 20
2018-05-24 21
2018-05-25 22
2018-05-26 23
2018-05-27 24
2018-05-28 25
2018-05-29 26
2018-05-30 27
2018-05-31 28
Я играл с ROW_NUMBER (вместе с RANK и DENSE_RANK), но мне не удалось заставить эти функции выполнить то, что я ищу, но я надеюсь, что у меня есть дополнительный столбец с именем «TimePeriod», где даты сгруппированы вместе с шагом в 2 недели (или 14 дней), так что с 04.05.18 по 17.05.18 значение столбца «TimePeriod» равно 1, а с 18.05.18 по 31.05.18 будет значение 2 для столбца «TimePeriod». И это должно быть динамическим, чтобы более широкие диапазоны дат группировались в периоды по две недели, при этом каждый период увеличивался на 1.
Предложения?