Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将团购与窗口功能相结合?_Sql_Presto - Fatal编程技术网

Sql 将团购与窗口功能相结合?

Sql 将团购与窗口功能相结合?,sql,presto,Sql,Presto,我正在尝试找出如何将GroupBy与窗口函数结合起来 我有野外作业 timestamp track_name 其中时间戳表示播放曲目的时间 如果我想得到每天播放最多的曲目,我该怎么做 我需要一个按日期(时间戳)分组的曲目名称计数,以及曲目名称计数 但不知道如何按计数分组,然后在当天获得最多 thnx 您当然可以将分析函数与分组查询混合使用。在下面的查询中,我按日期和曲目名称进行聚合,但也基于聚合的计数生成排名。对于每个日期,将保留排名最高的曲目。请注意,我使用的是RANK而不是ROW\u N

我正在尝试找出如何将GroupBy与窗口函数结合起来

我有野外作业

timestamp track_name 
其中时间戳表示播放曲目的时间

如果我想得到每天播放最多的曲目,我该怎么做

我需要一个按日期(时间戳)分组的曲目名称计数,以及曲目名称计数

但不知道如何按计数分组,然后在当天获得最多


thnx

您当然可以将分析函数与
分组查询混合使用。在下面的查询中,我按日期和曲目名称进行聚合,但也基于聚合的计数生成排名。对于每个日期,将保留排名最高的曲目。请注意,我使用的是
RANK
而不是
ROW\u 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;

这是因为分析函数是在
groupby
完成后进行计算的。因此,
COUNT(*)
可用于调用
RANK()

谢谢,如果我不想将上述内容用作CTE,我可以使用实际的select dt,track\U name from(内部查询),其中rnk=1正确吗?作为子查询?@Chris90是的,您可以直接内联CTE,即do:
SELECT dt,track_name FROM(…CTE…)as t,其中rnk=1
谢谢,我当时让它变得更难了,因为我似乎不知道如何在窗口中使用group by函数!答案没有问题,如果您还有其他要求,您可以等待其他答案。@Chris90否,如果您想按月份的日期进行排序,那么您可能应该使用
orderbyday(dt)
。如果要按日期排序,只需使用
orderbydt