2016-03-04 64 views
0

我試圖在月份的某一天生成累計銷售額(以便我可以在同一圖表上繪製多個月,在Y軸量的累積和),但是當我離開加入到generate_series(1,31),我得到:在Postgres中的generate_series上加入提取(日期從DATE)

d sum 
1 3746.5 
2 5731.5 
3 9258.42 

而我要的是:

d sum 
1 3746.5 
2 5731.5 
3 9258.42 
4 0 
5 0 
... 0 
31 0 

這裏是我的查詢:

SELECT 
    d, 
    SUM (SUM("Amount")) OVER (ORDER BY "CloseDate" ASC) 
FROM 
    salesforce."Opportunity" 
LEFT JOIN generate_series (1, 31) d ON d = EXTRACT (DAY FROM "CloseDate") 
WHERE 
    EXTRACT (MONTH FROM "CloseDate") = EXTRACT (MONTH FROM now()) 
AND EXTRACT (YEAR FROM "CloseDate") = EXTRACT (YEAR FROM now()) 
AND "StageName" = 'Closed Won' 
AND "Type" = 'Renewal' 
GROUP BY 
    "CloseDate", 
    d 

我可以感覺到我做錯了什麼,但我不知道是什麼。任何幫助將不勝感激 - 謝謝!

回答

0

沒錯。你需要把你的彙總子查詢,並首先從generate_series然後選擇左連接上:

WITH days as (
     select d from generate_series (1, 31) d), 
    aggregates as (
     SELECT 
      EXTRACT (DAY FROM "CloseDate") d, 
      SUM (SUM("Amount")) OVER (ORDER BY "CloseDate" ASC) total 
     FROM 
      salesforce."Opportunity" 
     WHERE 
      EXTRACT (MONTH FROM "CloseDate") = EXTRACT (MONTH FROM now()) 
      AND EXTRACT (YEAR FROM "CloseDate") = EXTRACT (YEAR FROM now()) 
      AND "StageName" = 'Closed Won' 
      AND "Type" = 'Renewal' 
     GROUP BY 
      "CloseDate" 
    ) 
select days.d, aggregates.total 
from days 
left join aggregates on days.d = aggregates.d 
order by days.d; 

最簡單的方法,如果你在一個子查詢放在group by然後最可讀的左連接子查詢到幾天。您也可以添加更多子查詢並加入它們,以便在同一個表中擁有更多的聚合,即使是來自不同的源表。

+0

我試過了,但我仍然得到相同的結果(IE只是值爲d = 1,2,3) – amizzo

+0

正確。我意識到自己的錯誤後編輯了答案。 – hruske

+0

完美!謝謝! :) – amizzo