如何在Hive/Spark SQL中使用窗口函数消除重叠
我有一张有客户和产品信息的桌子如何在Hive/Spark SQL中使用窗口函数消除重叠,sql,hive,apache-spark-sql,pyspark-sql,window-functions,Sql,Hive,Apache Spark Sql,Pyspark Sql,Window Functions,我有一张有客户和产品信息的桌子 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
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
有些促销活动在产品信息中重叠。例如,促销标识555和556可用于产品222。我想删除促销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()函数,但似乎无法得到它。使用
row\u 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
使用
行号
:
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
谢谢您提供的解决方案,但我担心这不起作用。@DataTx反例?
行号()
需要切换到密集等级()(按客户ID划分,按产品ID排序,按促销ID划分)
但是你的建议对我来说绝对是正确的方向。谢谢你的解决方案,但我担心这不起作用。@DataTx反例?行号()
需要切换到密集等级()(按客户ID划分,按产品ID订购,按产品ID促销)
但是你的建议对我来说绝对是正确的方向。那么产品编号278是促销的一部分吗?产品编号278是促销的一部分吗?