幾個月內的累計金額
我有這張桌子:
我想創建一個名為
sold
基於計算的新列 - 這將是harvested
幾個月(9 月至 6 月)內的執行總和。每年 9 月,sold
將始終為 1(或 100%)。2021 年 10 月的計算將是fruits
/ (harvested
+harvested_Nov
) = 143 / 11 + 139。對於 2021 年的其餘月份,遵循相同的格式:
fruits
/ (harvested
+harvested_until_Sep
) –> 這將是一個執行總和,從您所在的月份開始,到上一年的 9 月結束。2022 年的另一個範例是 2022 年 3 月的計算 =
fruits
/ (harvested
+harvested_Feb_2022
+harvested_Jan_2022
+harvested_Dec_2021
+harvested_Nov_2021
+harvested_Oct_2021
+harvested_Sep_2021
) = 123 / (5+12+10+9+14+11+139)。該表應如下所示:
我試過這個:
select month_rep, fruits, harvested, case when extract(month from "month_rep") in (7, 8) then null when extract(month from "month_rep") = 9 then 1 else ROUND(fruits / sum(harvested) over (order by month_rep), 2) end sold from my_table
這很好用,但只有當我有 2022 年 9 月之前的數據時。我希望 Jul 和 Aug 為 null
sold
- 這很有效。2022 年 8 月之後,2022 年 9 月應該是一個新的時期,其中sold
1。在那之後,2022 年 10 月將計算為fruits
/ (harvested
+harvested_Sep_2022
) - 我們從 2022 年 9 月 2 日到 2023 年 6 月的第二個時期開始一個新時期。有沒有辦法對這些“時期”進行分組並對其進行匯總?我可能需要找到一種方法來對期間進行分組並從中進行分區。
將日期移動 8 個月,以便從 9 月到 6 月移動到 1 月到 9 月。然後你可以按年份分區:
SELECT * , CASE extract(month FROM month_rep) WHEN 7 THEN NULL WHEN 8 THEN NULL WHEN 9 THEN 1 ELSE round(fruits::numeric / sum(harvested) OVER (PARTITION BY date_trunc('year', month_rep - interval '8 mon') ORDER BY month_rep), 2) END AS sold FROM tbl ORDER BY month_rep;
db<>在這裡擺弄
準確地產生您想要的結果。