Этот запрос получает верхний элемент в каждой группе, используя функцию ранжирования.
Я хочу уменьшить количество внутренних выборок до двух вместо трех. Я пытался использовать функцию rank () для внутреннего запроса, но не смог заставить ее работать вместе с агрегатной функцией. Тогда я не мог использовать предложение where для itemrank, не добавив его в еще одно выражение select.
Есть идеи?
select *
from (
select
tmp.*,
rank() over (partition by tmp.slot order by slot, itemcount desc) as itemrank
from (
select
i.name,
i.icon,
ci.slot,
count(i.itemid) as itemcount
from items i
inner join citems ci on ci.itemid = i.itemid
group by i.name, i.icon, ci.slot
) as tmp
) as popularitems
where itemrank = 1
РЕДАКТИРОВАТЬ: с использованием SQL Server 2008