Это похоже на агрегирование и оконные функции. Известно, что функции даты зависят от базы данных, но идея такая:
select ymc.*
from (select year(r_date) as yyyy, month(r_date) as mm, c_id, sum(amount) as amount,
row_number() over (partition by c_id order by sum(amount) desc) as seqnum
from t
group by year(r_date), month(r_date), c_id
) ymc
where seqnum = 1;
Не все базы данных поддерживают year()
и month()
, но все они имеют схожие функции. Таким образом, вам может потребоваться изменить то, что использует ваша база данных.