Мы можем использовать ROW_NUMBER
здесь:
WITH cte AS (
SELECT Source, EventType, COUNT(*) as Frequency,
ROW_NUMBER() OVER (PARTITION BY Source ORDER BY COUNT(*) DESC) rn
FROM myEventTable
GROUP BY Source, Eventtype
)
SELECT Source, EventType, Frequency
FROM cte
WHERE rn <= 2;
![enter image description here](https://i.stack.imgur.com/oef8X.png)
Демо
Причина, по которой это работает, заключается в том, что ROW_NUMBER
применяется после того, как операция GROUP BY
завершена, т.е. она выполняется для групп.Затем мы можем легко ограничить 2 верхних на источник в порядке убывания частоты.