PostgreSQL根据表字段生成月份和年份序列,如果给定月份没有数据,则用空值填充。

时间 2019-02-19
阅读 40
点赞 0
收藏 0
连接ar-11

我想从当前年份的下一个月生成一系列的月份和年份(比如,start_month)至12个月start_month以及PostgreSQL中另一个表的相应数据(如果有,则返回空值)。

SELECT ( ( DATE '2019-03-01' + ( interval '1' month * generate_series(0, 11) ) ) 
         ::  DATE ) dd, 
       extract(year FROM ( DATE '2019-03-01' + ( interval '1' month * 
                                                 generate_series(0, 11) ) 
                         )), 
       coalesce(SUM(price), 0) 
FROM   items 
WHERE  s.date_added >= '2019-03-01' 
       AND s.date_added < '2020-03-01' 
       AND item_type_id = 3 
GROUP  BY 1, 
          2 
ORDER  BY 2; 

上面的查询的问题是它为我提供了相同的值price所有的几个月。要求是price如果没有,则用空值或零填充列price给定月份的数据可用。

建议答案

你想要generate_seriesFROM从句和连接起来,有点像

SELECT months.m::date, ...
FROM generate_series(
        start_month,
        start_month + INTERVAL '11 months',
        INTERVAL '1 month'
     ) AS months(m)
   LEFT JOIN items
      ON months.m::date = items.date_added
👍 0