generate_series

我需要一个查询,该查询返回当月每天的所有已付账单的累计金额。

我尝试了一些代码,包括以下代码:

SELECT DISTINCT 
         month.day,sum(bills.value) OVER (ORDER BY month.day)
FROM generate_series(1,31) month(day)
  LEFT JOIN bills ON date_part('day',bills.payment_date) = month.day
WHERE
(
(date_part('year',bills.payment_date)=date_part('year',CURRENT_DATE)) AND
(date_part('month',bills.payment_date)=date_part('month',CURRENT_DATE))
)
GROUP  BY month.day,bills.value,bills.payment_date
ORDER  BY month.day

我得到:

day  | value  
1    |  1000   
4    |  3000   
5    |  5000

总和是正确的,但是我不能从generate_series函数获得全部31天的时间。另外,当我删除DISTINCT命令时,查询只会重复几天,例如:

day  | value  
1    |  1000   
4    |  3000   
4    |  3000  
4    |  3000  
4    |  3000  
5    |  5000   
5    |  5000   

我想要的是:

day  | value  
1    |  1000   
2    |  1000   
3    |  1000  
4    |  3000  
5    |  5000  
6    |  5000   
...  |  5000   
31   |  5000  

有什么想法吗?

xukelongjinhong 回答:generate_series

从分组用户中删除bills.value,bills.payment_date,那么您也不再需要特殊字符。您还可以简化WHERE子句。但是您需要将该条件移到JOIN条件,否则它将使外部联接变回内部联接。

SELECT month.day,sum(sum(bills.value)) over (order by month.day) as total_value
FROM generate_series(1,31) month(day)
  LEFT JOIN bills
        ON date_part('day',bills.payment_date) = month.day
       AND to_char(bills.payment_date,'yyyymm') = to_char(current_date,'yyyymm')
GROUP  BY month.day
ORDER  BY month.day
本文链接:https://www.f2er.com/3152249.html

大家都在问