【发布时间】:2021-05-12 23:25:24
【问题描述】:
我想知道是否可以在 Postgresql 中使用基于时间的窗口查询。
原始数据在前三列(日期、业务员、金额):
| date | salesman | amount | sum-3-rolling-days |
|---|---|---|---|
| 2020-01-01 | john | 10 | 10 |
| 2020-01-02 | john | 15 | 25 |
| 2020-01-03 | john | 8 | 33 |
| 2020-01-04 | john | 12 | 35 |
| 2020-01-05 | john | 11 | 31 |
| 2020-01-01 | daniel | 5 | 5 |
| 2020-01-02 | daniel | 6 | 11 |
| 2020-01-03 | daniel | 7 | 18 |
| 2020-01-04 | daniel | 8 | 21 |
| 2020-01-05 | daniel | 9 | 24 |
第四列表示该业务员在过去三个滚动日内的总金额。
Pandas 具有执行此操作的内置函数,但我想不出在 Postgresql 中使用内置 sum() over () 语法的任何方法。我能够做到的唯一方法是使用横向连接和子查询的复杂组合,以及时间增量比较条件,这至少可以说是不雅的。
Pandas 的方式(根据记忆,确切的语法可能略有不同)——无法获得任何简洁:
df.groupby('salesman').rolling('3d').sum()
【问题讨论】:
标签: postgresql time-series window-functions rolling-computation