我有一个表,其中包含以纯文本编写的各种 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 |
使用 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 |