OVER(PARTITION BY order by)函数更详细的使用,可查看博文
https://blog.csdn.net/qq_41712271/article/details/109224538
select row_number() over (partition by month order by ref_host_cnts desc)
partition:按照month分成区块
order by :排序是在partition分成的区块中分别进行。
row_number():对各个分区分别添加编号,类似于rownum的递增序列
准备表和测试数据
create external table product_1
(day_id string,
mac_id int,
mac_color string,
day_num int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
load data local inpath '/tmp/data1.txt' overwrite into table product_1
20171011 1292 金色 1
20171011 1292 金色 14
20171011 1292 金色 2
20171011 1292 金色 11
20171011 1292 黑色 2
20171011 1292 粉金 58
20171011 1292 金色 1
20171011 2013 金色 10
20171011 2013 金色 9
20171011 2013 金色 2
20171011 2013 金色 1
20171012 1292 金色 5
20171012 1292 金色 7
20171012 1292 金色 5
20171012 1292 粉金 1
20171012 2013 粉金 1
20171012 2013 金色 6
20171013 1292 黑色 1
20171013 2013 粉金 2
20171011 12460 茶花金 1
sql查询示例如下,以day_id分组,按day_num排序,最前3个
select * from (
select day_id,mac_id,mac_color,day_num,
row_number() over (partition by day_id order by day_num desc) as od
from product_1
) t where od<=3
返回的结果如下