创建具有重复索引的排名列

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
;

基本上我选择了与每个用户和国家关联的时间戳的最大值。然后可以对其进行排序并加入到原始数据集中。