【问题标题】:Defining window function frame for moving average为移动平均定义窗口函数框架
【发布时间】:2020-12-28 12:04:37
【问题描述】:

我正在尝试使用窗口函数创建移动平均线。我希望它总结前 7 天的计数。我有一列表示日期,一列表示小时,每个日期 - 小时行都有一个计数。

例如,对于 8/18,我想将之前所有行的计数相加(8/11 到 8/17)。考虑到每个日期都按小时展开,这有点棘手。那么所有 8/18 行将具有与前 7 天相同的总和值。

我尝试在 redshift 中使用组或范围定义框架,但它似乎只喜欢行。

到目前为止,我所拥有的只是对具有相同日期的组的计数求和。我该如何调整或有其他方法?

sum(count) over (partition by date)

date       hour  count last7day
2020-08-11  0      1     
2020-08-11  1      5
2020-08-11  2      8
.
.
.
2020-08-11  23     4 
.
.
.
2020-08-17  23     7
2020-08-18  0.          sum of all rows from 2020-08-11 hour 0 through 2020-08-17 hour 23
2020-08-18  1
2020-08-18  2

【问题讨论】:

  • 注意datehourcount都是Postgres SQL中的关键字。避免将它们用作标识符。

标签: sql postgresql amazon-redshift window-functions


【解决方案1】:

你可以试试这个。

如果需要滚动平均到前 1 天的日期 -

  Sum(count) OVER (order by date RANGE BETWEEN '7 days' PRECEDING AND '1 day' PRECEDING)

如果到前一行的日期需要滚动平均值-

Sum(count) OVER (order by date RANGE BETWEEN '7 days' PRECEDING AND 1 PRECEDING)

【讨论】:

  • 较小的值必须是下限。您可以从日期中减去整数。答案可能与格式化有关。完成后,我准备投票了。
  • 你实际上不需要减去任何东西。 range between '7 day' preceding and '1 day' preceding应该够了
  • 是的,有道理。我相应地编辑了答案。
  • 从 v11 开始工作。你用的是哪个版本?
  • PostgreSQL 8.0. :(
猜你喜欢
  • 2022-09-24
  • 2019-03-22
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2022-01-26
  • 2016-07-04
相关资源
最近更新 更多