You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中修改QUALIFY子句实现consumer_id下双维度去重

解决方案

根据你的需求,要在原查询基础上同时保证consumer_id下business_id不重复,可根据业务场景选择以下两种简便修改方式:

场景1:business_id与store_id一一对应

如果每个store_id属于唯一的business_id,且每个business_id仅对应一个store_id,只需修改PARTITION BY的分组字段,将business_id加入(或直接替换store_id),即可同时满足store_id和business_id在consumer_id下的唯一性:

SELECT
    t.consumer_id
    , t.business_id
    , t.store_id
    , t.campaign_id
FROM campaigns_mini AS t
QUALIFY ROW_NUMBER() OVER (PARTITION BY t.consumer_id, t.business_id ORDER BY t.campaign_id) = 1

场景2:business_id与store_id非一一对应

如果一个business_id对应多个store_id,且需要同时保证consumer_id下store_id和business_id都唯一,可通过两层QUALIFY实现:先确保store_id唯一,再在结果中确保business_id唯一(保留每个business_id对应的第一条记录):

SELECT
    consumer_id
    , business_id
    , store_id
    , campaign_id
FROM (
    SELECT
        t.consumer_id
        , t.business_id
        , t.store_id
        , t.campaign_id
    FROM campaigns_mini AS t
    QUALIFY ROW_NUMBER() OVER (PARTITION BY t.consumer_id, t.store_id ORDER BY t.campaign_id) = 1
)
QUALIFY ROW_NUMBER() OVER (PARTITION BY consumer_id, business_id ORDER BY campaign_id) = 1

说明

  • 两种方案均通过ROW_NUMBER()函数按campaign_id排序取第一条记录,确保保留的是最早(若需最新记录,可将排序规则改为ORDER BY t.campaign_id DESC)的关联记录。
  • 若需优先保证business_id唯一再处理store_id,可调换两层QUALIFY的顺序。

内容的提问来源于stack exchange,提问作者Mark G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:54:11