创建具有重复索引的排名列
Creating a Rank Column with Repeated Indexes
我要输出以下内容table:
User | Country | RANK
------------------------------
1 US 3
1 US 3
1 NZ 2
1 NZ 2
1 NZ 2
1 JP 1
2 US 2
2 US 2
2 US 2
2 CA 1
我有 'User' 和 'Country' 列,我想创建 RANK 列。
我尝试使用函数 rank()
rank() over (partition by User, Country order by ct desc)
其中 ct 只是自纪元以来的事件时间,但它没有给出一些重复的数字,如 33 222 1,而是在分区内排名,给我 12 123 1。
我也试过row_number()
没有成功。
如果我使用 rank() over (partition by User order by country desc)
它有效,但我如何保证它也按 ct 排名?
关于如何做到这一点的任何线索?
您对数据架构的理解很模糊。但假设您的数据如下所示:
User Country Unix_time(epoch)
1 US 1437888888
1 NZ 1437666666
2 US 1437777777
2 NZ 1435555555
我认为这可行,但我无法测试,因为我的笔记本电脑上没有配置单元。
select c.*, b.rank
from my_table c
left outer join
(select user
, country
, rank() over (partition by user, order by unix_time desc) as rank
from
(select user, country, max(unix_time) as unix_time
from my_table group by user, country
) a
) b
on c.user=b.user and c.country=b.country
;
基本上我选择了与每个用户和国家关联的时间戳的最大值。然后可以对其进行排序并加入到原始数据集中。
我要输出以下内容table:
User | Country | RANK
------------------------------
1 US 3
1 US 3
1 NZ 2
1 NZ 2
1 NZ 2
1 JP 1
2 US 2
2 US 2
2 US 2
2 CA 1
我有 'User' 和 'Country' 列,我想创建 RANK 列。
我尝试使用函数 rank()
rank() over (partition by User, Country order by ct desc)
其中 ct 只是自纪元以来的事件时间,但它没有给出一些重复的数字,如 33 222 1,而是在分区内排名,给我 12 123 1。
我也试过row_number()
没有成功。
如果我使用 rank() over (partition by User order by country desc)
它有效,但我如何保证它也按 ct 排名?
关于如何做到这一点的任何线索?
您对数据架构的理解很模糊。但假设您的数据如下所示:
User Country Unix_time(epoch)
1 US 1437888888
1 NZ 1437666666
2 US 1437777777
2 NZ 1435555555
我认为这可行,但我无法测试,因为我的笔记本电脑上没有配置单元。
select c.*, b.rank
from my_table c
left outer join
(select user
, country
, rank() over (partition by user, order by unix_time desc) as rank
from
(select user, country, max(unix_time) as unix_time
from my_table group by user, country
) a
) b
on c.user=b.user and c.country=b.country
;
基本上我选择了与每个用户和国家关联的时间戳的最大值。然后可以对其进行排序并加入到原始数据集中。