如何在hive/sparksql中使用窗口函数消除重叠

8nuwlpux  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(347)

我有一张有顾客和产品信息的table。

customer_id promotion_id   product_id  Rank
1               555            222      1
1               555            223      1 
1               555            999      1
1               556            154      2
1               556            222      2
1               556            278      2 
1               557            432      3
1               557            434      3
1               557            435      3

有些促销活动在产品信息上有重叠。例如,可以在产品222上使用促销标识555和556。我想删除促销id 556并重新排名,以便促销557排名第二,如下所示:

customer_id promotion_id   product_id  Rank
1               555            222      1
1               555            223      1 
1               555            999      1
1               557            432      2
1               557            434      2
1               557            435      2

我一直在用sql中的row\u number()/rank()函数,但我似乎没有得到它。

lxkprmvk

lxkprmvk1#

使用 ROW_NUMBER :

SELECT *, DENSE_RANK() OVER(ORDER BY promotion_id) AS new_rank
FROM (SELECT *, DENSE_RANK() OVER(PARTITION BY CUSTOMER_ID, PRODUCT_ID 
                                  ORDER BY PRODUCT_ID, PROMOTION_ID) rn
      FROM tab) s
WHERE rn = 1

相关问题