0
有條件所以,我有一個看起來像這樣Postgres的總金額就行比較
User_Object | filesize | created_date | deleted_date
row 1 | 40 | May 10 | Aug 20
row 2 | 10 | June 3 | Null
row 3 | 20 | Nov 8 | Null
我建立統計記錄用戶數據使用到基於圖形的基於時間的數據點的數據。但是,我很難開發一個查詢來獲取它之前所有查詢的每一行的總和,但僅限於該行創建時存在的行。採取這一步驟納入刪除的值之前,我有過這樣一個簡單樸素的查詢:
SELECT User_Object.id, User_Object.created, SUM(filesize) OVER (ORDER BY User_Object.created) AS sum_data_used
FROM User_Object
JOIN user ON User_Object.user_id = user.id
WHERE user.id = $1
不過,我想這樣,有一個條件的窗函數以某種方式改變這種只得到任何總和在此用戶對象之前該行沒有刪除日期時創建的行。
這種不正確的語法說明了什麼我想做的事:
SELECT User_Object.id, User_Object.created,
SUM(CASE WHEN NOT window_function_row.deleted
OR window_function_row.deleted > User_Object.created
THEN filesize ELSE 0)
OVER (ORDER BY User_Object.created) AS sum_data_used
FROM User_Object
JOIN user ON User_Object.user_id = user.id
WHERE user.id = $1
當這個功能對我有數據運行時,它應該輸出像
id | created | sum_data_used|
1 | May 10 | 40
2 | June 3 | 50
3 | Nov 8 | 30
非常感謝您的建議!這是不幸的是,這將最終成爲一個昂貴的查詢,但是這就是爲什麼我希望通過此之前,我與子查詢什麼可怕的是比這N^2的複雜性有更糟糕的運行它 –