SQL: Как выбрать год и месяц, когда товарооборот клиентов был самым большим? - PullRequest
0 голосов
/ 25 мая 2020

Мне нужно перечислить 10 лучших клиентов по среднемесячному обороту транзакций, в дополнительном столбце указать год и месяц с наибольшим месячным оборотом клиента.

Я сделал первую часть - перечислил 10 лучших клиентов по среднемесячный оборот по сумме транзакций.

Select column1, AVG(Case when when column1="x" then column2
                      when column1="y" then column2
                      when column1="z" then column2
                      when column1="q" then column2 End)/12 [AVG]
from table1
Group by column1
Order by AVG DESC;

Как составить вторую часть задачи - в дополнительном столбце указать год и месяц с наибольшим месячным оборотом клиента?

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Используйте запрос ниже, запрос ниже для Oracle, пометьте свою базу данных, чтобы можно было предоставить соответствующий запрос.

select c_id, to_char(r_date, 'MM'), to_char(r_date, 'YYYY'), max(amount)
group by c_id, to_char(r_date, 'MM'), to_char(r_date, 'YYYY');
0 голосов
/ 25 мая 2020

Это похоже на агрегирование и оконные функции. Известно, что функции даты зависят от базы данных, но идея такая:

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(), но все они имеют схожие функции. Таким образом, вам может потребоваться изменить то, что использует ваша база данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...