【问题标题】:How to do a x-days grouped sum in redshift?如何在红移中进行 x 天分组总和?
【发布时间】:2017-10-10 08:52:20
【问题描述】:

我有下表, 显示在不同日期有多少来自不同单位的商品进入库存。

ID    Date       Unit   Quantity 
---------------------------------
1    2017-08-01  A_red      05
2    2017-08-13  A_red      10
3    2017-09-20  A_red      20
4    2017-09-22  A_red      40
5    2017-10-05  A_red      40
6    2017-10-25  A_red      30
7    2017-10-24  A_blue     60

问题是:同一单元30天时间间隔内的条目要分组。
所以我想要以下结果:

ID    Date      Unit   Quantity fst_entry30 Quantity30  
-----------------------------------------------------
1   2017-08-01  A_red     05       T          15
2   2017-08-13  A_red     10       F          15
3   2017-09-20  A_red     20       T          100
4   2017-09-22  A_red     40       F          100
5   2017-10-05  A_red     40       F          100
6   2017-10-25  A_red     30       T          30
7   2017-10-24  A_blue    60       T          60

其中 fst_entry30 是一个标志,指示该条目是否是该单元在过去 30 天内的第一个条目。请注意,如果我有不同的单位(A_blue 而不是 A_red),它将不会被分组。
数量30是数量的分组总和。
比如 10 月 5 日到 9 月 20 日之间的天数不足 30 天,所以进行了分组。

记住 Redshift 不允许递归公用表表达式。 我已经尝试过自联接,但结果很麻烦。

【问题讨论】:

标签: sql amazon-redshift recursive-query


【解决方案1】:

您只需使用lag() 来定义组:

select t.*,
       (case when date >= lag(date) over (partition by unit order by date) + interval '30 day'
             then 0 else 1
        end) as grp_start
from t;

然后你可以做一个累积和来为组分配一个数字。 . .最后使用窗口函数将它们相加:

select t.*, sum(quantity) over (partition by unit, grp)
from (select t.*,
             sum(grp_start) over (partition by unit order by date) as grp
      from (select t.*,
                   (case when date >= lag(date) over (partition by unit order by date) + interval '30 day'
                         then 0 else 1
                    end) as grp_start
            from t
           ) t
      ) t

【讨论】:

  • 谢谢,问题几乎解决了,但是这样的查询会为 id = 6 生成错误的结果。因为它将 10 月 25 日与 10 月 5 日(最后一行)进行比较,当它应该与 20 日进行比较时九月(第二个分区开始的行)。
猜你喜欢
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2012-03-18
相关资源
最近更新 更多