2011-08-05 47 views
7

我有一個表S採用這樣的時間序列數據:優化Vertica的SQL查詢做運行總計

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味道,默認窗口子句之間的範圍內UNBOUNDED PRECEDING AND CURRENT ROW,但我離開了,在那裏是明確的。

這個查詢非常慢,就像比舊的斷開的查詢慢了一個數量級,這個斷開的查詢填充了0個累計計數。對於其他方法生成累計數字的任何建議?

我沒有看這裏的解決方案: Running total by grouped records in table

我使用的RDBMS是Vertica的。 Vertica SQL排除了第一個子查詢解決方案,其查詢規劃人員預測第二個左外連接解決方​​案的成本要比上面顯示的分析形式高出大約100倍。

+0

你已經爲這個表定義什麼預測?多少行和不同的密鑰? 「非常緩慢」的速度有多慢? – 2011-09-20 19:06:07

+0

你在桌上有多少行?你如何劃分/分割該表的主投影? – mtrbean

+0

對我來說很難理解!您能否提供具有所需輸出的樣本數據? – AK47

回答

-1

有時候它的速度更快,只需使用一個相關子查詢:

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

Vertica不支持這種性質的相關子查詢。 – duber