Tsql 按时间段分组记录
我试图获取用户选择的时间框架,然后将选择分组为时间段——在本例中为:2周 例如,今天是2018年5月4日,如果我将其设置为我的开始日期,将其设置为2018年5月31日,我会得到以下结果: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
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