date_range
подзапрос генерирует 24 месяца (отрегулируйте, если хотите, чтобы диапазон отличался от 24 месяцев) назад от текущей даты. Присоединитесь к нему со своим набором данных, смотрите комментарии в этом демонстрационном коде:
with date_range as
(--this query generates months range, check it's output
select date_format(add_months(concat(date_format(current_date,'yyyy-MM'),'-01'),-s.i),'yyyyMM') as year_month
from ( select posexplode(split(space(24),' ')) as (i,x) ) s --24 months
),
your_data as (--use your table instead of this example
select stack(7,
202001, 500,
202001, 600,
201912, 100,
201910, 200,
201910, 100,
201909, 400,
201601,5000 -----this date is beyond 24 months, hence it is not in the output
) as (YEAR_MONTH, AMOUNT )
)
select d.year_month, sum(nvl(s.amount,0)) as amount --aggregate
from date_range d
left join your_data s on d.year_month=s.year_month
group by d.year_month;
Результат:
d.year_month amount
201801 0
201802 0
201803 0
201804 0
201805 0
201806 0
201807 0
201808 0
201809 0
201810 0
201811 0
201812 0
201901 0
201902 0
201903 0
201904 0
201905 0
201906 0
201907 0
201908 0
201909 400
201910 300
201911 0
201912 100
202001 1100
Используйте вашу таблицу вместо подзапроса your_data. При необходимости добавьте order by
.