我试图采取一个时间框架,用户选择,然后分组的时间周期-在这种情况下: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 (以及军衔和DENSE_RANK ),但是我没有能够让这些功能来完成我想要做的事情,但我希望做的是增加一个名为"TimePeriod“的列,在这个列中,日期以2周的增量(或14天)组合在一起,这样5/4/18至5/17/18对于"TimePeriod”列的值为1,5/18/18至5/31/18的值对于"TimePeriod“列的值为2。这应该是动态的,以便将更大的日期范围分组为两周,每个周期增加1。
有什么建议吗?
发布于 2018-05-04 21:39:56
如果不需要在sql中使用排序和排序函数,那么可以很容易地实现如下所示。
https://stackoverflow.com/questions/50182967
复制相似问题