BigQuery窗口函数Rank使用问题:如何生成符合预期的rank_2字段
BigQuery 排名字段rank_2实现方案
已实现逻辑回顾
你已通过dense_rank()窗口函数生成了rank1,逻辑为按user_id分组,先按product_id排序、再按timestamp_added倒序排序的不间隙排名。
dense_rank() over (partition by user_id order by product_id,timestamp_added desc) as rank1
rank_2实现方案
从你给出的样例可判断rank_2的规则为:同一用户、同一产品的分组内,为每条记录生成连续不重复的序号,即使排序依据的时间戳完全一致也会分配不同排名,直接使用row_number()窗口函数即可实现:
row_number() over (partition by user_id, product_id order by timestamp_added desc) as rank_2
逻辑验证
针对你给出的样例数据,上述代码计算结果和你期望的rank_2值完全匹配:
- 用户10、产品100的2条记录被分到同一组,时间戳一致时
row_number()自动分配1、2两个连续序号 - 用户10、产品200的1条记录单独分组,序号为1
内容的提问来源于stack exchange,提问作者pythonlearner
相关产品推荐
相关产品推荐

