如何从表中进行过滤,其中2个不同的列有2个不同的记录,并且在bigquery中具有相同的键组合集?

问题描述 投票:0回答:1

我正在处理数百万数据,我想过滤 2 个不同的列,这些列具有同一组键组合的 2 个不同记录,

桌子看起来像:

SK 姓名 DOB TS EFF_DT 来源
123 1 托马斯 1/12/1994 2024-29-03T00:00:00 24-03 ABC
123 1 托马斯 1/12/1994 2024-29-03T12:00:00 24-05 ABC
456 1 托马斯 1/12/1994 2024-29-04T00:00:00 14-03 CBA
456 1 托马斯 1/12/1994 2024-29-04T12:00:00 14-03 CBA

我想根据关键列组合来过滤记录,即 SK 和 NO 列对于不同的 TS 和 eff_dt 是相同的,并且不想选择 TS 单独不同的记录。

有人可以解释一下如何实现这一目标吗?

提前致谢!

预期产出:

SK 姓名 DOB TS EFF_DT 来源
123 1 托马斯 1/12/1994 2024-29-03T00:00:00 24-03 ABC
123 1 托马斯 1/12/1994 2024-29-03T12:00:00 24-05 ABC
sql google-bigquery duplicates
1个回答
0
投票

首先,我们使用 GROUP BYHAVING 子句识别在两个单独的列中具有两个唯一值的

SK
NO
的组合:

SELECT SK, NO
FROM mytable
GROUP BY SK, NO
HAVING COUNT(DISTINCT TS) = 2 AND  COUNT(DISTINCT EFF_DT) = 2

然后,为了获得所需的结果,我们将其与原始表合并:

SELECT t.*
FROM mytable t
INNER JOIN (
  SELECT SK, NO
  FROM mytable
  GROUP BY SK, NO
  HAVING COUNT(DISTINCT TS) = 2 AND  COUNT(DISTINCT EFF_DT) = 2
) AS s ON s.SK = t.SK AND s.NO = t.NO
© www.soinside.com 2019 - 2024. All rights reserved.