我正在尝试用户选择的时间范围,然后将选择分组为时间段 - 在这种情况下:2周。
例如,今天是5/4/2018,如果我将其设置为我的开始日期和5/31/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天)组合在一起,以便5/4/18到5/17/18的“TimePeriod”列和5/18/18到5/31 /的值为1对于“TimePeriod”列,18的值为2。这应该是动态的,以便更广泛的日期范围按两周的时间段分组,每个期间增加1.
建议?
答案 0 :(得分:1)
如果没有要求在sql中使用排序和排名功能,您可以轻松实现如下。
所以这基本上会给你当前日期所属的间隔(2周),它基于零,所以你可能想要为它添加1
DECLARE @StartDate DATE, @EndDate DATE, @ToDate DATE;
DECLARE @DaysDiff INT;
SET @StartDate = GETDATE(); SET @EndDate ='20180531'; SET @ToDate = DATEADD(DAY,1,@ EndDate); - 获取开始日期和结束日期之间的天数差异 SET @DaysDiff = DATEDIFF(Day,@ StartDate,@ ToDate)
SELECT dd.Date,
(@DaysDiff - DATEDIFF(Day,dd.Date,@ ToDate))/ 14
来自dbo.DateDimension AS [dd]
在哪里dd.Date&gt; = @StartDate
AND dd.Date&lt; @ToDate;