Oracle中关联子查询使用外部表列的标准SQL实现方案
解决方案
可以用以下两种标准SQL方式实现需求,无需使用对象或记录类型:
方法一:窗口函数ROW_NUMBER()
这是最直观的实现方式,通过窗口函数为每个匹配ID_ELEMENTO_008 = ID_007且AuditData <= 008表AuditData的007表记录排序,筛选出最新的一条:
SELECT loc.*, aud.* FROM NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008 loc LEFT JOIN ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY ID_007 ORDER BY AuditData DESC ) rn FROM NAT_DASH_AUD_ELEMENTO_WORKFLOW_007 ) aud ON aud.ID_007 = loc.ID_ELEMENTO_008 AND aud.AuditData <= loc.AuditData AND aud.rn = 1;
说明:如果仅需保留有匹配007表记录的行,将
LEFT JOIN替换为INNER JOIN即可。
方法二:关联子查询匹配最新AuditData
先找出每个ID_007对应小于等于当前008表行AuditData的最大时间戳,再关联007表获取完整记录:
SELECT loc.*, aud.* FROM NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008 loc LEFT JOIN NAT_DASH_AUD_ELEMENTO_WORKFLOW_007 aud ON aud.ID_007 = loc.ID_ELEMENTO_008 AND aud.AuditData = ( SELECT MAX(AuditData) FROM NAT_DASH_AUD_ELEMENTO_WORKFLOW_007 WHERE ID_007 = loc.ID_ELEMENTO_008 AND AuditData <= loc.AuditData );
说明:若同一
ID_007在同一最大时间戳下有多条记录,此方法会返回多条匹配行;需唯一结果时,方法一的窗口函数方案更稳妥。
内容的提问来源于stack exchange,提问作者gt.guybrush
相关产品推荐
相关产品推荐

