【发布时间】:2023-02-20 23:24:12
【问题描述】:
我有一个包含以下几列的表格。
输入:
| PID | Column A || Column B | Column C || Column D | GID |
| -------- | -------- || -------- | -------- || -------- | -------- |
| | 123 || abc | xyz || 1 | 0001 |
| | 123 || abc | cfd || 1 | 0002 |
| | 321 || abc | cfd || 1 | 0003 |
| | 321 || cba | dfs || null | 0004 |
| | 234 || ert | rte || 2 | 0005 |
| | 456 || ter | rte || 2 | 0006 |
| | 123 || bbv | cfd || 1 | 0007 |
| | 567 || bbv | tre || null | 0008 |
我需要输出格式如下。 每当我看到 4 个标识符中的任何一个匹配时,我需要将相同的 PID 分配给下一行
输出:
| PID | Column A || Column B | Column C || Column D | GID |
| -------- | -------- || -------- | -------- || -------- | -------- |
| 0001 | 123 || abc | xyz || 1 | 0001 |
| 0001 | 123 || abc | cfd || 1 | 0002 |
| 0001 | 321 || abc | cfd || 1 | 0003 |
| 0001 | 321 || cba | dfs || null | 0004 |
| 0005 | 234 || ert | rte || 2 | 0005 |
| 0005 | 456 || ter | rte || 2 | 0006 |
| 0001 | 123 || bbv | cfd || 1 | 0007 |
| 0001 | 567 || bbv | tre || null | 0008 |
对于第 2 行,因为它具有相同的 A 列和 B,D 它分配了相同的 PID 与第 3 行类似,它具有相同的列 B、C 和 D 对于第 4 行,我有相同的 COl A 等等。
有人可以帮助在雪花中创建查询以获得所需的输出。谢谢。
我试过创建 cte 但它没有解决目的。有什么办法可以做到这一点。
代码 sn-p:这适用于第一次迭代。希望它递归地对整个数据集起作用。
with cte_1 as
(
select distinct Column B,pid_ori
from my_table ec
join (select distinct Column A,first_value(person_id) over(partition by Column A order by start_datetime) pid_ori
from my_table
)a
on a.Column A=ec.Column A
)
,
cte_2 as
(
select ec.Column A,ec.Column B,pid_ori,ec.Column C
from my_table ec
join cte_1
on ec.Column B = cte_1.Column B
)
,
cte_3 as
(
select fp.Column A Column A, fp.Column B Column B,pid_ori,fp.Column C Column C,fp.Column D
,fp.start_datetime
from my_table fp
join cte_2 ec
on ec.Column C = fp.Column C
)
select distinct pid_ori,Column A,Column B,Column C
from cte_Column C
【问题讨论】:
标签: sql snowflake-cloud-data-platform