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

请求协助编写SQL查询:为Table1选择并合并Active Record ID

解决方案:用窗口函数实现分组获取活跃记录ID

嘿,这个需求很清晰——你需要给每个Name+PID分组里的所有记录,都带上该组中updateDT为NULL的那条“活跃记录”的ID。下面两种方法都能完美实现你的目标:

方法一:窗口函数(推荐,简洁高效)

窗口函数是处理这类分组内关联计算的最佳选择,不需要额外的关联操作,性能更优:

SELECT 
    ID,
    Name,
    PID,
    updateDT,
    -- 分组内找到updateDT为NULL的记录ID,填充到组内所有行
    MAX(CASE WHEN updateDT IS NULL THEN ID END) OVER (PARTITION BY Name, PID) AS Lt_Record
FROM Table1;

代码解释:

  • PARTITION BY Name, PID:将数据按Name和PID划分为独立的分组,同一组的记录共享计算结果
  • MAX(CASE WHEN updateDT IS NULL THEN ID END):在每个分组里筛选出updateDT为NULL的记录ID,因为每组仅有一条这样的记录,用MAX/MIN/FIRST_VALUE都能拿到这个唯一ID
  • 窗口函数会自动把这个活跃ID填充到组内的每一行,完全匹配你想要的输出结果

方法二:子查询关联

如果你更习惯用传统的关联写法,也可以先提前查询出每个分组的活跃ID,再关联回原表:

SELECT 
    t1.ID,
    t1.Name,
    t1.PID,
    t1.updateDT,
    t2.active_id AS Lt_Record
FROM Table1 t1
INNER JOIN (
    -- 先获取每个分组的活跃记录ID(updateDT为NULL的那条)
    SELECT Name, PID, ID AS active_id
    FROM Table1
    WHERE updateDT IS NULL
) t2 
    ON t1.Name = t2.Name 
    AND t1.PID = t2.PID;

注意事项:

这个方法的前提是每个Name+PID分组恰好有一条updateDT为NULL的记录,和你提供的测试数据情况一致。如果存在分组有多个NULL记录的场景,需要调整子查询(比如用GROUP BY Name,PID取MIN(ID)或MAX(ID))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:13:04