我有来自eventhub的流数据如下:
product price quantity
1 55 100
2 44 200
2 43 200
1 60 300
2 55 100
2 44 50
2 47 100
1 44 100
1 48 100
现在我想计算按产品分组的成交量加权平均价格,但总是只计算最近500个交易量单位的成交量(而不是所有值)。
基于时间窗口的计算是直接的,但我只想汇总过去500个单位的交易量。
所以我在寻找某种没有时间限制的窗口函数。这是现有的,甚至可能与流分析?
1条答案
按热度按时间kb5ga3dv1#
加权平均的公式为:
由于您有时间戳,您可以使用该字段来计算每个产品的基于数量列的加权平均价格,其中窗口框架包括过去500秒内的所有行。下面是查询
查询:
在此查询中,CTE
stgquery
选择product
、每组product
值的price
列的累积和,以及每组product
值的price
和quantity
列的乘积之和(使用SUM
函数,窗口框架包括最近500秒内的所有行)。这可以根据需要进行更改)。SELECT
语句选择product
列,并根据quantity
列为每组product
值计算price
列的加权平均值。通过将price
和quantity
列的乘积之和(存储在Stgquery
CTE的num
列中)除以price
列的累积和(存储在Stgquery
CTE的denom
列中)来计算加权平均值。结果作为名为weighted_average
的新列返回。输出:
| 加权平均| weighted_average |
| --| ------------ |
| 一百| 100 |
| 两百| 200 |
| 两百| 200 |
| 204.3478| 204.3478 |
| 161.2676| 161.2676 |
| 134.9462| 134.9462 |
| 一百二十七点八九七| 127.897 |
| 175.4717| 175.4717 |
| 157.971| 157.971 |