greenplum:實現TeraData中的CSUM

greenplum中實現teradata同樣的sql時常常會遇到csum不存在的問題,本文提供一個解法。

 

一、不帶group by

Teradata中執行

SELECT salesdate, sales, csum(sales, salesdate)
FROM daily_sales
WHERE salesdate BETWEEN 980101 AND 980301
AND itemid = 10;

結果

salesdate     sales       Csum
98/01/01     150.00         150.00
98/01/02     200.00         350.00
98/01/03     250.00         600.00
98/01/05     350.00         950.00
98/01/10     550.00        1500.00

在greenplum實現csum(sales, salesdate)可替換爲

SUM(sales) over(ORDER BY salesdate ASC)

 

二、帶group by

Teradata中執行

SELECT salesdate, sales, csum(sales, salesdate)
FROM daily_sales ds, sys_calendar.calendar sc
WHERE ds.salesdate = sc.calendar_date
AND sc.year_of_calendar = 1998
AND sc.month_of_year in (1,2)
AND ds.itemid = 10
GROUP BY sc.month_of_year;

結果

salesdate sales Csum
98/01/01 150.00 150.00
98/01/02 200.00 350.00
98/01/03 250.00 600.00
98/01/05 350.00 950.00
98/01/10 550.00 1500.00
98/01/21 150.00 1650.00
98/01/25 200.00 1850.00
98/01/31 100.00 1950.00
98/02/01  150.00 150.00   重新累計
98/02/03 250.00 400.00
98/02/06 350.00 750.00
98/02/17 550.00 1300.00
98/02/20 450.00 1750.00
98/02/27 350.00 2100.00

在greenplum實現csum(sales, salesdate)可替換爲

SUM(sales) over(PARTITION BY sc.month_of_year ORDER BY salesdate ASC)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章