with done_bugs as ( select date_trunc('month', last_modified) as last_modified_month, id, done_email, severity from archived_bugs where status = 'done' union select date_trunc('month', last_modified) as last_modified_month, id, done_email, severity from bugs where status = 'done' ), my_bugs as ( select * from done_bugs where done_email = 'cjwatson@debian.org' and severity >= 'serious' ) select to_char(month.month, 'YYYY-MM'), count(*) filter (where my_bugs.last_modified_month = month.month) from generate_series((select min(last_modified_month) from my_bugs), (select max(last_modified_month) from my_bugs), '1 month') month left join my_bugs on month.month = my_bugs.last_modified_month group by 1 order by 1 desc ;