Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化Vertica SQL查询以进行运行总计_Sql_Vertica_Window Functions_Cumulative Sum - Fatal编程技术网

优化Vertica SQL查询以进行运行总计

优化Vertica SQL查询以进行运行总计,sql,vertica,window-functions,cumulative-sum,Sql,Vertica,Window Functions,Cumulative Sum,我有一个表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 在

我有一个表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风格中,默认窗口子句的范围介于无界的前一行和当前行之间,但我将其保留在其中,以便显式显示

这个查询的速度非常慢,就像旧的中断查询的数量级慢一样,它的累计计数是0。对生成累积数字的其他方法有何建议

我在这里看到了解决方案:


我使用的RDBMs是Vertica。Vertica SQL排除了第一个子选择解决方案,其查询规划器预测,第二个左外连接解决方案的成本大约是我在上面展示的分析表单的100倍。

有时只使用相关子查询会更快:

SELECT 
    [key]
    , [day]
    , delta
    , (SELECT SUM(delta) FROM S WHERE [key] < t1.[key]) AS DeltaSum
FROM S t1

我认为你基本上就在那里。您可能只需要稍微更新一下语法:

SELECT s_qty, 
   Sum(s_price) 
     OVER( 
       partition BY NULL 
       ORDER BY s_qty ASC rows UNBOUNDED PRECEDING ) "Cumulative Sum" 
FROM   sample_sales;
输出:

参考链接:

https://dwgeek.com/vertica-cumulative-sum-average-and-example.html/

您为此表定义了哪些投影?有多少行和不同的键?“多慢”是“非常慢”?表中有多少行?你如何划分/分割该表的主投影?我很难理解!请提供所需输出的样本数据好吗?这可能有助于Vertica不支持这种性质的相关子查询。
https://dwgeek.com/vertica-cumulative-sum-average-and-example.html/