Вы, безусловно, можете смешивать аналитические функции c с запросом GROUP BY
. В приведенном ниже запросе я агрегирую по дате и названию трека, но также генерирую рейтинг на основе агрегированного количества. Для каждой даты сохраняется дорожка с наивысшим рейтингом. Обратите внимание, что я использую RANK
, а не ROW_NUMBER
, так как первый может обрабатывать возможность связывания двух или более треков для наибольшего количества воспроизведений за один день.
WITH cte AS (
SELECT DATE(timestamp) AS dt, track_name,
RANK() OVER (PARTITION BY DATE(timestamp) ORDER BY COUNT(*) DESC) rnk
FROM yourTable
GROUP BY DATE(timestamp), track_name
)
SELECT dt, track_name
FROM cte
WHERE rnk = 1;
Это работает, потому что Функции analyti c оцениваются после того, как GROUP BY
уже завершено. Таким образом, COUNT(*)
доступен для использования при вызове RANK()
.