К сожалению, в этом случае нельзя использовать оконные функции, потому что вы не можете перемещаться в пределах разделов, используя даты, т.е. суммировать все продажи для клиента за сегодня минус один месяц.Я предполагаю, что невозможно иметь транзакцию для каждого клиента каждый день (тогда можно использовать оконные функции).Я бы начал с чего-то вроде этого:
select
CustomerNo
,sum(case when [Date] >= '2019-01-01' and [Date] <= '2019-03-31' then Amount else 0 end ) as PeriodTotal
,sum(case when [Date] >= '2018-01-01' and [Date] <= '2018-03-31' then Amount else 0 end ) as PreviousYearPeriodTotal
,sum(case when [Date] >= '2019-01-01' and [Date] <= '2019-12-32' then Amount else 0 end ) as YearTotal
,sum(case when [Date] >= '2018-01-01' and [Date] <= '2018-12-32' then Amount else 0 end ) as PreviousYearTotal
from sales
group by CustomerNo