1

在工作中,我经常需要找到每个外键的最大状态。在大多数情况下,我总是在连接上使用相关的子查询来获得正确的记录。这是假设最高的主键是最新的。这是一个小演示

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 子句来确保没有更高的记录,但找不到其他任何东西。有人可以提出更好的建议吗?如果可以,为什么?

4

1 回答 1

0

我建议使用sandard窗口函数......

;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;

允许您从任一表中获取您想要的任何内容,但仍然只能获取一条记录

于 2013-09-22T04:23:53.147 回答