先说场景:
A表中的policyno与B表中的policyno关联,并且只取最后一名人员的zyempno
B表中的zyempno与C表中的empno关联。
原来的做法是:
读取表A的记录后,遍历A表中的记录,根据A中的某个关联字段如 单证号policyno ,去查询B表中的 zyempno,(A.policyno=B.policyno and B.ZYTIME是最大的 )。
再通过zyempno查找C表中的字段 的empname (B.zyempno=C.empno)。
现在修改为:
写在一个sql里实现这个需求
select a.*,(select empname from c where empno=t1.zyempno) as empname from a
left join (
select * from
(
select policyno,zyempno,row_number() over(partition by policyno order by zytime desc) rank from b
) where rank=1
) t1
on a.policyno=t1.policyno
这里主要用到 row_number() over(partition by policyno order by zytime desc) rank 按policyno分组同时按zytime排序,生成一个rank。
不想再新建表了,直接拿我项目中的结果贴到这儿。差不多就是这个意思。
参考文章: