sql - 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
解决方案
我喜欢这种不使用子查询的方法:
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
返回所有1
s 。
推荐阅读
- objective-c - Async 块中的 Objective C 变量不会更改 Class 变量值
- node.js - 连接到 AWS DocumentDB 时出现连接错误
- ruby-on-rails - 为什么设计消毒剂返回空哈希
- ecmascript-6 - 使用选中的复选框过滤并使用未选中的复选框清除过滤器
- android - neighborlist.getCid() 总是返回 -1 作为值
- angular - 使用 ngIf 显示嵌套数组中的错误
- google-chrome-extension - 在 chrome 扩展后台脚本中使用 gapi,无效的 cookiePolicy
- jenkins - “发布 JUnit 测试结果报告”Jenkins 插件不支持 jmeter 命令 -J 和 -l 选项生成的 JTL 文件 XML 格式
- dart - 使用 Targetplatform 会导致布局问题
- objective-c - ScrollView 正在吃 Swipe Gesture Recognizer