我的基表(名称:duplicates
)包含重复的product_id
列表。没有包含明确的product_id
。我需要根据以下标准进行重复删除:
product_id in_stock price sales_channel
A112233 NULL 12.95 Online
A112233 11345678 12.95 Store
A112233 12466654 11.95 NULL
product_id
in_stock
(由NOT NULL
表示)product_id
price
product_id
放在sales_channel = ‘Online’
product_id
in_stock
和sales_channel
可以包含NULL
值我试图利用ROW_NUMBER()
函数为每个分区提供排名,但我不确定如何对此进行编码,因为它不是基于静态分区(分区将更改为某个{{1}被忽视了。)
之前有人这样做过吗?
答案 0 :(得分:0)
您仍然可以使用ROW_NUMBER()
函数,您只需要为ORDER BY
子句添加更多条件,如下所示:
with a as(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY product_id
ORDER BY CASE in_stock IS NOT NULL THEN 1 ELSE 2 END,
price,
CASE COALESCE(sales_channel, '') = 'Online' THEN 1 ELSE 2 END) as rn
from duplicates)
select * from a where rn = 1