Sql 对同一子查询的多个联接

Sql 对同一子查询的多个联接,sql,join,subquery,Sql,Join,Subquery,我需要反复加入同一个表,但这看起来很难看。如有任何建议,我们将不胜感激。下面是简化的SQL,我在子查询中有8个表,它生成许多相同日期的重复记录,所以我只需要为每个客户机找到最新的记录。我认为DB和/或版本不重要,但我使用的是DB211.1LUW select c.client_num, a.eff_date, t.trx_date from client c join address a on(a.id = c.addr_id) join transaction t on(t.addr_id

我需要反复加入同一个表,但这看起来很难看。如有任何建议,我们将不胜感激。下面是简化的SQL,我在子查询中有8个表,它生成许多相同日期的重复记录,所以我只需要为每个客户机找到最新的记录。我认为DB和/或版本不重要,但我使用的是DB211.1LUW

select c.client_num, a.eff_date, t.trx_date
from client c 
join address a on(a.id = c.addr_id)
join transaction t on(t.addr_id = a.id)
{many other joins}
where {many conditions};

select SQ.*
from [ABOVE_SUBQUERY] SQ
join
    (select client_num, max(eff_date) AS newest_date from [ABOVE_SUBQUERY] group by client_num) AA
    ON(SQ.client_num = AA.client_num and SQ.eff_date = AA.newest_date)
join
    (select client_num, max(trx_date) AS newest_date from [ABOVE_SUBQUERY] group by client_num) TT 
    ON(SQ.client_num = TT.client_num and SQ.trx_date = TT.newest_date)
我只需要为每个客户刷新最新的记录

你就不能用排号吗


应用操作也可能有效,如果两者都没有帮助,CTE将直接回答问题。谢谢Joel,我研究了常见的表表达式CTE,这将更正确地回答我的问题。虽然我不喜欢答案,但排号建议消除了我的需求。谢谢你@Gordon Linoff,效果很好。我接受了答案,但这不会让我放弃投票。
select t.*
from (select t.*,
             row_number() over (partition by client_num order by eff_date desc, eff_time desc) as seqnum
      from <whatever> t
     ) t
where seqnum = 1;