Tsql 按时间段分组记录

Tsql 按时间段分组记录,tsql,sql-server-2016,datepart,Tsql,Sql Server 2016,Datepart,我试图获取用户选择的时间框架,然后将选择分组为时间段——在本例中为: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

我试图获取用户选择的时间框架,然后将选择分组为时间段——在本例中为: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;
我一直在玩ROW_NUMBER、RANK和DENSE_RANK,但我还没能使用这些函数来完成我所寻找的功能,但我希望能有一个名为TimePeriod的附加列,其中日期以2周或14天的增量分组在一起,以便5/4/18到5/17/18的值为1表示时间段列,5/18/18至5/31/18表示时间段列的值为2。这应该是动态的,以便更广泛的日期范围在两周内分组,每个周期增加1


建议?

如果不需要在sql中使用排序和排名函数,您可以很容易地实现如下

获取开始日期和结束日期之间的总天数 对于每个日期,从总天数差中减去当前日期的天数差,然后除以14 因此,这基本上会给你当前日期所属的间隔2周,它是以零为基础的,所以你可能想给它加一个1

声明@StartDate日期, @截止日期, @今日日期

声明@DaysDiff INT

设置@StartDate=GETDATE; 设置@EndDate='20180531'; 设置@ToDate=DATEADD-DAY,1,@EndDate; -获取开始日期和结束日期之间的天数差 设置@DaysDiff=DATEDIFF-Day、@StartDate、@ToDate

选择日期, @DaysDiff-DATEDIFFDay,dd.Date,@ToDate/14 来自dbo.DateDimension作为[dd] 其中dd.Date>=@StartDate 日期<@ToDate


谢谢-绝对不需要使用任何类型的排名函数,我只是在尝试解决这个问题。但这非常有效——是的,我确实在时间段中添加了+1,以获得我所希望的结果。再次感谢,
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