如何使用我的子字符串列将子查询连接到父查询

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

我有一个表,其中包含以纯文本编写的各种 ID 的数据字段。

其他_ID 数据 日期
123 用户ID:098;元数据:[ID:6482] 2024-10-13
456 用户id:754;元数据:[ID:0743] 2024-10-12
123 用户ID:098;元数据:[ID:6482] 2024-10-01

我想提取 ID 并使用该 ID 将子查询添加到我的 SELECT 语句中以查找最大日期并使用匹配的 ID 来匹配它。我在提取 ID 时没有遇到问题,但无法匹配我刚刚提取的 ID,以查找子查询中每个字段的最大日期。我想也许我需要在 select 语句中的最大日期之后将子字符串部分拉入子查询中,但这也不起作用,并且出现错误:

Unsupported: Scalar subquery with multi-column SELECT clause.

SELECT 
    table2.org_name,
    table3.user_email,
    SUBSTRING(table1.data, CHARINDEX('metadata', table1.data), 5) as object_id,
    (SELECT MAX(datetime)
        FROM table1 
        WHERE SUBSTRING(table.data, CHARINDEX('metadata', table.data), 5) = pp.id AND event_type LIKE 'created-object' AND datetime > '2024-10-08') 
        as most_recent_created
FROM 
    table1
    LEFT JOIN pp ON ie_presentation_id = pp.id
    
    ...LEFT JOIN table2, LEFT JOIN table3 ... etc

我希望它会吐出类似的内容:

id 最大日期
6482 2024-10-13
456 2024-10-12
sql snowflake-cloud-data-platform subquery substring
1个回答
0
投票

使用 CTE 测试数据:

with table1(other_id, data, date) as (
    select * from values
    (123, 'user_id:098; metdata:[ID: 6482]', '2024-10-13'::date),
    (456, 'user_id:754; metdata:[ID: 0743]', '2024-10-12'::date),
    (123, 'user_id:098; metdata:[ID: 6482]', '2024-10-01'::date)
)

您可以简单地使用 REGEXP_SUBSTR 来提取 ID,然后对其进行分组:

select
    regexp_substr(t.data, '.*\\[ID:(.*)\\].*', 1,1,'e',1) as id
    ,max(t.date) as max_date
from table1 as t
group by 1 order by 1;

给予:

身份证 MAX_DATE
0743 2024-10-12
6482 2024-10-13
© www.soinside.com 2019 - 2024. All rights reserved.