我正试图找出如何将组与窗口函数组合起来。
我有个字段
timestamp track_name 其中时间戳表示播放轨道的时间。
如果我想得到每天播放最多的曲目,我该怎么做呢?
我需要按日期(时间戳)和分组的track_name计数。
但不知道该怎么做,按计数分组,然后得到最多的那一天?
索尼克斯!
发布于 2020-03-26 05:18:31
当然,您可以将分析函数与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;这是因为分析函数是在GROUP BY完成后计算的。因此,COUNT(*)可以用于对RANK()的调用。
https://stackoverflow.com/questions/60861355
复制相似问题