【问题标题】:Group Records By Time Period按时间段分组记录
【发布时间】: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


    【解决方案1】:

    如果不要求使用sql中的排序和排序功能,你可以很容易地实现如下。

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

      声明@StartDate 日期, @EndDate 日期, @ToDate 日期;

      声明@DaysDiff INT;

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

      选择 dd.Date , (@DaysDiff - DATEDIFF(Day,dd.Date,@ToDate))/14
      FROM dbo.DateDimension AS [dd] WHERE dd.Date >= @StartDate AND dd.Date

    【讨论】:

    • 谢谢 - 绝对不需要使用任何类型的排名函数,我只是在尝试解决这个问题。但这很好用 - 是的,我确实在时间段中添加了 +1 以获得我希望的结果。再次感谢,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多