2016-11-30 105 views
0

我想獲得的時間差數學運算符

lead(time) - time 

這不起作用:

SELECT 
the_geom, 
id, 
lat, 
lng, 
mapid, 
time, 
lead(time) - time // THIS DOESNT WORK 
OVER (PARTITION BY id ORDER BY time ASC) 
as duration 

FROM history 

但這個工程:

SELECT 
the_geom, 
id, 
lat, 
lng, 
mapid, 
time, 
-time + lead(time) // THIS WORKS 
OVER (PARTITION BY id ORDER BY time ASC) 
as duration 

FROM history 

第一個給出錯誤:

Syntax error near OVER 

我不知道爲什麼會出現這種情況,誰能解釋一下?

+0

請定義'不BTW work':'time'是一個保留字。 – wildplasser

回答

1

窗口函數有兩個部分

第一部分類似於聚集函數,例如函數表達式

Sum(revenue) 
row_number() 
rank() 

這部分必須跟一個OVER clause。在你的情況下,

OVER (PARTITION BY id ORDER BY time ASC) 

窗口功能是通過把兩者放在一起,

SUM(revenue) OVER (PARTITION BY department 
        ORDER BY created_month 
        ROWS BETWEEN UNBUNDED PRECEDING AND CURRENT ROW) 
-- this calculates the running total for fictitious `departments` 
-- over months 

你的第一個查詢沒有做到這一點,第二個呢,因爲SQL忽略了新的生產線時,它計算表達式