Похоже, вы хотите:
select to_char(date, 'YYYY-MM'), sum(count),
(sum(count) - lag(sum(count)) over (partition by min(date)) as difference
from t
group by to_char(date, 'YYYY-MM')
order by min(date) desc
fetch first 2 rows only;
Обратите внимание, это будет включать разницу за второй месяц, если есть больше исторических данных. Это похоже на «особенность». Но вы можете решить эту проблему путем агрегации и последующей фильтрации с помощью предложения where
:
select yyyymm,
(cnt - lag(cnt) over (partition by yyyymm) as difference
from (select to_char(date, 'YYYY-MM') as yyyymm, sum(count) as cnt,
row_number() over (order by min(date) desc) as seqnum
from t
group by to_char(date, 'YYYY-MM')
) yc
where sequm <= 2
order by yyyymm desc