Выбор наибольших и наименьших значений при группировке в sql
Есть следующие данные:
ID sum ind
1 5 A
1 4 B
1 3 C
1 2 D
2 5 A
2 5 B
2 3 C
3 5 A
3 4 B
3 3 C
3 3 D
Необходимо для каждого ID выбрать наибольшую и наименьшую sum и их ind
Если значений несколько, то выбираем первый по алфавиту, то есть на выходе необходимо получить
ID sum ind
1 5 A
1 2 D
2 5 A
2 3 C
3 5 A
3 3 C
Код пишется в MS SQL
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
С использование аналитической функции:
select id, sum, ind
from (
select *,
rank() over (partition by ID order by sum asc, ind asc) as asc_rank,
rank() over (partition by ID order by sum desc, ind asc) as desc_rank
from mytable) as m
where asc_rank = 1 or desc_rank = 1;
Этот запрос вернет несколько записей, если у нас, скажем, есть еще одна запись с sum=5 и ind=A. Если нужно чтоб возвращалась только одна, то нужно заменить rank() на row_number().