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

如何在BigQuery中筛选键组合相同但TS与EFF_DT均不同的表记录

BigQuery 实现指定筛选逻辑的方案

针对你需要筛选SK和NO相同,且TS与EFF_DT均不同的记录(排除仅TS不同、EFF_DT相同的组),这里提供两种高效的BigQuery实现方式:

方法一:窗口函数分组统计(推荐百万级数据使用)

通过窗口函数先统计每个SK+NO组合下不同EFF_DT的数量,保留数量大于1的组的所有记录——这类组中必然存在TS和EFF_DT均不同的记录,符合筛选要求。

WITH grouped_stats AS (
  SELECT
    *,
    -- 统计当前SK+NO组内不同EFF_DT的数量
    COUNT(DISTINCT EFF_DT) OVER (PARTITION BY SK, NO) AS distinct_eff_dt_count
  FROM
    `你的项目ID.数据集名称.表名称` -- 替换为你的实际表路径
)
SELECT
  SK, NO, NAME, DOB, TS, EFF_DT, SOURCE
FROM
  grouped_stats
WHERE
  distinct_eff_dt_count > 1;

方法二:EXISTS子查询(逻辑更直观)

直接检查每条记录是否存在同SK+NO的其他记录,满足TS不同且EFF_DT不同,存在则保留该记录。

SELECT
  t1.*
FROM
  `你的项目ID.数据集名称.表名称` t1
WHERE
  EXISTS (
    SELECT 1
    FROM `你的项目ID.数据集名称.表名称` t2
    WHERE
      t2.SK = t1.SK
      AND t2.NO = t1.NO
      AND t2.TS != t1.TS
      AND t2.EFF_DT != t1.EFF_DT
  );

方案说明

  • 百万级数据优先选方法一:窗口函数只需对表做一次全量扫描,性能更优;
  • 方法二逻辑更直白,但对于大数据量,关联查询的开销会高于窗口函数。

测试你的示例数据时,两种方法都会返回SK=123的两条记录,排除SK=456的两条记录,完全符合期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:55:25