首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本年度和前一年的周范围组数据

本年度和前一年的周范围组数据
EN

Stack Overflow用户
提问于 2016-09-21 13:44:57
回答 1查看 532关注 0票数 1

我有一个表格,其中有本年度和前一年的数据。此表中的单个记录表示在一年中的每一天发生的每一项事务。每个日期可以有多个记录。

我还在SSRS仪表板报告中显示与此表相关的数据。从此报表传递两个参数@StartDate和@EndDate。我需要编写一个接受@StartDate和@EndDate参数的Server存储过程。

我在这里面临的挑战是,根据从报告中通过的结束日期,我需要从本年度获得前8周的数据。此外,前一年的数据在相同的日期范围内显示,就像在SSRS图表上的每周细分比较。

例如,如果我的报告的截止日期是2016-09-21,我需要得到前8周的数据,即(9/15-9/21,9/8-9/14/14,9/1-9/7等等,最多7/28-8/3)。我还需要获得前一年相同日期范围的数据。

我还必须在SSRS报告侧图表的X轴上显示周日期范围。

请让我知道,如果我能提供任何进一步的细节,从我的结束。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-21 13:58:41

如果有帮助,我将使用UDF来生成动态日期范围。一个理货表,甚至是一个日期表,都可以做到这一点。

代码语言:javascript
复制
Declare @Date2 Date = GetDate()
Declare @Date1 Date = DateAdd(DAY,-49,@Date2)

Select DateR1=Cast(RetVal as Date)
      ,DateR2=Cast(DateAdd(DAY,6,RetVal) as Date) 
 From  [dbo].[udf-Create-Range-Date](@Date1,@Date2,'WK',1)
 Order By 1 

返回

代码语言:javascript
复制
DateR1      DateR2
2016-08-03  2016-08-09
2016-08-10  2016-08-16
2016-08-17  2016-08-23
2016-08-24  2016-08-30
2016-08-31  2016-09-06
2016-09-07  2016-09-13
2016-09-14  2016-09-20
2016-09-21  2016-09-27

如果需要的话,UDF

代码语言:javascript
复制
CREATE FUNCTION [dbo].[udf-Create-Range-Date] (@DateFrom datetime,@DateTo datetime,@DatePart varchar(10),@Incr int)

Returns 
@ReturnVal Table (RetVal datetime)
As
Begin
    With DateTable As (
        Select DateFrom = @DateFrom
        Union All
        Select Case @DatePart
               When 'YY' then DateAdd(YY, @Incr, df.dateFrom)
               When 'QQ' then DateAdd(QQ, @Incr, df.dateFrom)
               When 'MM' then DateAdd(MM, @Incr, df.dateFrom)
               When 'WK' then DateAdd(WK, @Incr, df.dateFrom)
               When 'DD' then DateAdd(DD, @Incr, df.dateFrom)
               When 'HH' then DateAdd(HH, @Incr, df.dateFrom)
               When 'MI' then DateAdd(MI, @Incr, df.dateFrom)
               When 'SS' then DateAdd(SS, @Incr, df.dateFrom)
               End
        From DateTable DF
        Where DF.DateFrom < @DateTo
    )
    Insert into @ReturnVal(RetVal) Select DateFrom From DateTable option (maxrecursion 32767)
    Return
End

-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2020-10-01','YY',1) 
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2020-10-01','DD',1) 
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2016-10-31','MI',15) 
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2016-10-02','SS',1) 

编辑-通过联接进行示例

代码语言:javascript
复制
Select D.DateR1
      ,D.DateR2
      ,TotalSales = sum(S.Sales)
 From  MySalesData S
 Join (
        Select DateR1=Cast(RetVal as Date)
              ,DateR2=Cast(DateAdd(DAY,6,RetVal) as Date) 
         From  [dbo].[udf-Create-Range-Date](@Date1,@Date2,'WK',1)
      ) D 
  on  S.Date Between D.DateR1 and D.DateR2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39618395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档