在工作中,我经常需要找到每个外键的最大状态。我在大多数情况下总是在连接上使用相关的子查询来获得正确的记录。这假设最高的主键是最新的。这是一个小小的演示
select
c.plate_number, o.name
from
Car c
inner join Owner o
on o.owner_id = (
select max(owner_id)
from Owner
where owner_type = 'PRIMARY'
)
在我使用的大多数查询中,这是非常快的,更不用说能够在类型列的子查询中添加额外的条件。我尝试使用NOT EXIST子句来确保没有更高的记录,但找不到任何其他内容。有人可以提出更好的建议吗?如果有,为什么?
答案 0 :(得分:0)
我建议使用标准窗口函数....
;with cte as (
select c.plateNumber, o.name,
row_number() over (partition by c.ownerId order by purchaseDate desc) rw
from car c
inner join owner o
on o.ownerid = c.ownerid
)
select *
from cte
where rw=1;
允许您从任一表中获得任何您想要的内容,并且仍然只能获得一条记录