首页 > 解决方案 > SQL - 返回每个报价 ID 的最高版本记录

问题描述

如果我有一个包含三列的表格,如下所示

CREATE TABLE QUOTATIONS 
(
    ID INT NOT NULL,
    VERSION INT NOT NULL,
    PRICE FLOAT NOT NULL
);

除此之外,假设该表由以下记录组成:

ID  |  VERSION  |  PRICE
----+-----------+--------
1   |     1     |   50
1   |     2     |   40
1   |     3     |   30
2   |     1     |   100
2   |     2     |   80
3   |     1     |   50

是否有任何单个 SQL 查询可以运行并仅返回具有最高版本的所有引用的行?

结果应如下所示:

ID  |  VERSION  |  PRICE
----+-----------+--------
1   |     3     |   30
2   |     2     |   80
3   |     1     |   50

标签: sqlsql-server

解决方案


我喜欢这种不使用子查询的方法:

select top (1) with ties q.*
from quotations q
order by row_number() over (partition by id order by version desc);

基本上,row_number()将“1”分配给每个id. top (1) with ties返回所有1s 。


推荐阅读