【问题标题】:Calculating rolling sum based on dates being in a range of calendar dates根据日历日期范围内的日期计算滚动总和
【发布时间】:2021-05-27 22:57:53
【问题描述】:

我想计算滚动总和,而不是基于有序日期行,而是基于日期在日历日期范围内的条件:

基本上我希望能够在 qtywhere date range varies from current date minus 4 calendar dayssum values。例如:

从图片中可以看出,我计算的是滚动总和,但它是基于从当前日期开始的 4 个日历日。红色箭头显示 2 月 16 日的情况,其中 4 个日历日必须包括到 2 月 12 日的所有数量。在这张表中,我在 2 月 16 日到 12 日之间只有 3 条记录。

这个条件不允许我使用 OVER 子句,因为我不知道我的表中有多少行将包含在该范围内(不是 4 天,我在这里给出了它作为示例,它可能会有所不同)。 我将不胜感激。

【问题讨论】:

    标签: sql sql-server rolling-computation


    【解决方案1】:

    APPLY 可能是最简单的解决方案:

    select t.*, t2.*
    from t outer apply
         (select sum(t2.qty) as qty_4
          from t t2
          where t2.date <= t.date and
                t2.date >= dateadd(day, -4, t.date)
         ) t2;
    

    【讨论】:

    • 这样写它返回重复。日期重复多次以及 qty_4。我试过GROUP BY,但没有得到结果。它迫使我按所有列分组。
    • 您能否编辑您的问题或提供其他可能的解决方案?
    • @Yana 。 . .这会准确地返回t 中的行。如果该表有重复项,则只有重复项。如果这是一个问题,请使用适当的样本数据和所需的结果提出一个新的问题。
    • 我的表中没有重复项。但我有身份证。所以我写sum(t2.qty) over(partition by id)
    • @Yana 。 . .这个答案应该做你想做的,并且没有窗口功能。您的问题没有 id,因此与答案无关,但大概您想添加 t2.id = t.id
    【解决方案2】:
    declare @table table (QTY int, [Date] datetime)
    insert into @table values (1,'2/23/2021')
    insert into @table values(2,'2/20/2021')
    insert into @table values(3,'2/19/2021')
    insert into @table values(4,'2/17/2021')
    insert into @table values(5,'2/16/2021')
    insert into @table values(6,'2/15/2021')
    insert into @table values(7,'2/14/2021')
    insert into @table values(8,'2/5/2021')
    insert into @table values(9,'1/30/2021')
    insert into @table values(10,'1/29/2021')
    insert into @table values(11,'1/24/2021')
    
    select t.*,( 
    select sum(t2.qty) 
      from @table t2
      where t2.date <= t.date 
      and   t2.date >= dateadd(day, -4, t.date)) as SUM_QTY
    FROM
    @table t
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 2018-03-05
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多