Я пытаюсь взять временной интервал, который выбирает пользователь, а затем сгруппировать выборку по периодам времени - в данном случае: 2 недели.
Например, сегодня 5/4/2018, и если я установлю это в качестве своей даты начала и 31.05.2008 в качестве своей конечной даты, я получу следующее:
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 дней), поэтому значения с 5/4/18 по 5/17/18 равны 1 для столбца «TimePeriod», а с 5/18/18 по 5/31 / 18 будет иметь значение 2 для столбца «TimePeriod». И это должно быть динамичным, чтобы более широкие диапазоны дат были сгруппированы по периодам в две недели с каждым периодом, увеличивающимся на 1.
Предложения