【发布时间】:2018-03-18 23:51:15
【问题描述】:
大师们,我在 hive rank 过程中偶然发现,我想对每天的交易进行排名(对于相同的 trx 值没有重复的排名值)
date hour trx rnk
18/03/2018 0 1 24
18/03/2018 1 2 23
18/03/2018 2 3 22
18/03/2018 3 4 21
18/03/2018 4 5 20
18/03/2018 5 6 19
18/03/2018 6 7 18
18/03/2018 7 8 17
18/03/2018 8 9 16
18/03/2018 9 10 15
18/03/2018 10 11 14
18/03/2018 11 12 13
18/03/2018 12 13 12
18/03/2018 13 14 11
18/03/2018 14 15 10
18/03/2018 15 16 9
18/03/2018 16 17 8
18/03/2018 17 18 7
18/03/2018 18 19 6
18/03/2018 19 20 5
18/03/2018 20 21 4
18/03/2018 21 22 3
18/03/2018 22 23 2
18/03/2018 23 24 1
17/03/2018 0 1 24
17/03/2018 1 2 23
17/03/2018 2 3 22
17/03/2018 3 4 21
17/03/2018 4 5 20
17/03/2018 5 6 19
17/03/2018 6 7 18
17/03/2018 7 8 17
17/03/2018 8 9 16
17/03/2018 9 10 15
17/03/2018 10 11 14
17/03/2018 11 12 13
17/03/2018 12 13 12
17/03/2018 13 14 11
17/03/2018 14 15 10
17/03/2018 15 16 9
17/03/2018 16 17 8
17/03/2018 17 18 7
17/03/2018 18 19 6
17/03/2018 19 20 5
17/03/2018 20 21 4
17/03/2018 21 22 3
17/03/2018 22 23 2
17/03/2018 23 24 1
这是我的代码
select a.date, a.hour, trx, rank() over (order by a.trx) as rnk from(
select date,hour, count(*) as trx from smy_tb
group by date, hour
)a
limit 100;
问题是: 1. rank 值与相同的 trx 值重复 2. rank值延续到下一个日期(应该按日期和小时分组,所以每个日期只会返回24个rank值)
需要建议, 谢谢你
【问题讨论】:
-
如果您在一天内获得相同的 trx 值,您想要的排序是什么?您可以将 row_number 与 trx 上的订单一起使用,或者将 rank() 与 trx 和小时上的订单一起使用。在这两种情况下都按日期划分。
-
嗨@BKS,你是对的,row_number() 解决这个问题