【发布时间】:2011-08-05 01:08:23
【问题描述】:
我有一个表 S,其中包含这样的时间序列数据:
key day delta
对于给定的密钥,可能但不太可能会丢失天数。
我想从增量值(正整数)构造一个累积列,以便将此累积数据插入另一个表。这是我到目前为止所得到的:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
在我的 SQL 风格中,默认窗口子句是 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,但我把它留在那里以便明确。
这个查询真的很慢,比旧的损坏查询慢了一个数量级,它用 0 填充累积计数。对于其他生成累积数字的方法有什么建议吗?
我确实在这里查看了解决方案: Running total by grouped records in table
我使用的 RDBM 是 Vertica。 Vertica SQL 排除了那里的第一个子选择解决方案,它的查询计划器预测第二个左外连接解决方案的成本大约是我上面显示的分析形式的 100 倍。
【问题讨论】:
-
您为此表定义了哪些投影?有多少行和不同的键? “非常慢”有多慢?
-
表中有多少行?您如何对该表的主投影进行分区/分段?
-
我很难理解!您能否提供所需输出的示例数据?
标签: sql vertica window-functions cumulative-sum