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

Snowflake中如何获取每个初始OLD_ID对应的最终NEW_ID?

获取初始OLD_ID对应的最终NEW_ID解决方案

针对你的需求,以下是Snowflake中的正确实现方式:

方法一:使用START WITH + CONNECT_BY_ISLEAF

SELECT 
    CONNECT_BY_ROOT old_id AS initial_old_id,
    new_id AS final_new_id
FROM temp_table
-- 指定递归起点:从未作为NEW_ID出现的OLD_ID(即链条的起始节点)
START WITH old_id NOT IN (SELECT new_id FROM temp_table)
-- 定义递归关系:上一条的NEW_ID是当前的OLD_ID,沿变更链追溯
CONNECT BY PRIOR new_id = old_id
-- 仅保留最终节点(无后续变更的节点)
WHERE CONNECT_BY_ISLEAF = 1
ORDER BY initial_old_id;

方法二:先筛选起点再关联查询

WITH initial_ids AS (
    -- 筛选所有初始OLD_ID
    SELECT old_id
    FROM temp_table
    WHERE old_id NOT IN (SELECT new_id FROM temp_table)
)
SELECT 
    ii.old_id AS initial_old_id,
    CONNECT_BY_ROOT new_id AS final_new_id
FROM temp_table
JOIN initial_ids ii ON temp_table.old_id = ii.old_id
CONNECT BY PRIOR new_id = old_id
WHERE CONNECT_BY_ISLEAF = 1
ORDER BY ii.old_id;

关键说明

  • START WITH:精准定位变更链的起始节点(A和W),这些节点从未被其他记录的NEW_ID指向,是链条的源头。
  • CONNECT BY PRIOR new_id = old_id:构建正确的递归关联,确保查询沿着A→B→C→D、W→X→Y→Z的链条追溯。
  • CONNECT_BY_ISLEAF = 1:只保留链条的最终节点(D和Z),这些节点没有后续的变更记录,就是你需要的最终NEW_ID。

执行以上任意查询后,都会得到期望的结果:

INITIAL_OLD_ID  FINAL_NEW_ID
A               D
W               Z

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:19