Ну, в MySQL 8+ вы можете использовать оконные функции.В более ранних версиях это коррелированный подзапрос.Это выглядит так:
select year(t.date),
max(next_5_days_sales),
substring_index(group_concat(date order by next_5_days_sales desc), ',', 1) as date_at_max
from (select t.*,
(select sum(t2.sales)
from t t2
where t2.date >= t.date and t2.date < t.date + interval 5 day
) as next_5_days_sales
from t
) t
group by year(t.date);
Примечания:
- Вам необходимо сбросить group_concat_max_len, потому что 1024, вероятно, недостаточно для промежуточного результата.
- Это позволяет периодам охватывать границы года.
В MySQL 8 используйте оконные функции!
select t.*
from (select t.*,
row_number() over (partition by year(date) order by next_5_days_sales) as seqnum
from (select t.*,
sum(t2.sales) over (order by date range between current row and 4 following) as as next_5_days_sales
from t
) t
) t
where seqnum = 1;