使用 SQL 将后续行中的反向对组合在一起
Group reversed pair in subsequent rows together using SQL
我正在处理超过 500,000 行的数据集,ID 为 Parent 和 Child(同一个系列)。
但是,数据集中存在一些 ID 颠倒(从而导致循环)的问题。
我能够提取有问题的记录(大约 2000 行),但我无法将反向 ID 对分组到 后续行 中,以便稍后识别对以进行更正.
Table 1:样本问题数据
YearMonth
ParentID
ChildID
202101
1234
5678
202101
9012
3456
202102
5678
1234
202102
3456
9012
Table 2:预期输出
YearMonth
ParentID
ChildID
202101
1234
5678
202102
5678
1234
202101
9012
3456
202102
3456
9012
您可以使用 exists
:
select t.*
from t
where exists (select 1
from t t2
where t2.parentid = t.childid and
t2.childid = t.parentid
);
要将反向 ID 配对在一起,您可以按 ID 列的最小值(或最大值)排序
select *
from t
where exists (
select *
from t t2 where t2.parentid = t.childid and t2.childid = t.parentid
)
order by case when parentId < childId then parentId else ChildId end
我正在处理超过 500,000 行的数据集,ID 为 Parent 和 Child(同一个系列)。
但是,数据集中存在一些 ID 颠倒(从而导致循环)的问题。
我能够提取有问题的记录(大约 2000 行),但我无法将反向 ID 对分组到 后续行 中,以便稍后识别对以进行更正.
Table 1:样本问题数据
YearMonth | ParentID | ChildID |
---|---|---|
202101 | 1234 | 5678 |
202101 | 9012 | 3456 |
202102 | 5678 | 1234 |
202102 | 3456 | 9012 |
Table 2:预期输出
YearMonth | ParentID | ChildID |
---|---|---|
202101 | 1234 | 5678 |
202102 | 5678 | 1234 |
202101 | 9012 | 3456 |
202102 | 3456 | 9012 |
您可以使用 exists
:
select t.*
from t
where exists (select 1
from t t2
where t2.parentid = t.childid and
t2.childid = t.parentid
);
要将反向 ID 配对在一起,您可以按 ID 列的最小值(或最大值)排序
select *
from t
where exists (
select *
from t t2 where t2.parentid = t.childid and t2.childid = t.parentid
)
order by case when parentId < childId then parentId else ChildId end