【发布时间】:2018-05-04 20:59:17
【问题描述】:
我正在尝试获取用户选择的时间范围,然后将选择分组为时间段 - 在本例中:2 周。
例如,今天是 2018 年 5 月 4 日,如果我将其设置为开始日期并将 2018 年 5 月 31 日设置为结束日期,我会得到以下信息:
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 的“TimePeriod”列的值为 1,5/18/18 到 5/31/对于“TimePeriod”列,18 的值为 2。这应该是动态的,以便更广泛的日期范围以两周为周期分组,每个周期增加 1。
建议?
【问题讨论】:
标签: tsql sql-server-2016 datepart