繁体   English   中英

SQL-左联接返回最新记录

[英]SQL - Left Join return latest record

我当前的代码是:

SELECT
T1.SC,
T2.ACC,
T3.C_IDENT,
T4.TITLE,
T4.MID,
T4.SUR
FROM D_REG.AR_JOINT T1

LEFT JOIN E_BASE.ACC_TRANS T2
ON T1.SC = T2.SC
AND T1.ACC = T2.ACC
AND T2.IDENTIFEIR_END_DATE ='3000-12-31'

LEFT JOIN E_BASE.B_HOLDING T3
ON T2.M_IDENT = T3.C_IDENT
AND T3.EFF_END_DATE ='3000-12-31'
AND T3.P_HOLDING_END+DATE ='3000-12-31'

LEFT JOIN E_BASE.PNAM T4
ON T3.C_IDENT = T4.C_IDR
AND T4.EFF_END_DATE ='3000-12-31'

目前,代码指出如果结束日期='3000-12-31',则返回结果。 但是,如果对表中的任何列进行了任何修改,它将为该记录创建一个重复行。 原始记录的结束日期为做出修改的日期,而新记录的结束日期为'3000-12-31'。

然后,我的代码将仅恢复活动记录。 如果记录不再有效,它将具有结束日期,例如“ 2018-10-15”,因此返回? T4中的值。

如何修改代码以取回具有最新结束日期的记录?

对于Teradata,您可以使用Qualify限制ODAP函数ROW_NUMBER()在这种情况下为ROW_NUMBER()在不了解更多数据的情况下无法完全回答您的问题。 但基本上,添加到您的查询

QUALIFY ROW_NUMBER() OVER (PARTITION BY <YOUR KEY COLUMN(S) ORDER BY  T4.EFF_END_DT DESC) = 1

这将为您提供每个“键”的最新行(基于列eff_end_dt)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM