选择表中每一行的最新版本
我的表结构包含 id 和 id 的复合主键;修订版,其中两者都是整数。
我需要一个查询来返回每行的最新版本。如果我理解这个如果回答正确,那么以下内容将在 Oracle DB 上运行。
SELECT Id, Title
FROM ( SELECT Id, Revision, MAX(Revision) OVER (PARTITION BY Id) LatestRevision FROM Task )
WHERE Revision = LatestRevision
我正在使用 SQL Server (2005),并且需要一个高性能查询来执行相同的操作。
I have table structures that include a composite primary key of id & revision where both are integers.
I need a query that will return the latest revision of each row. If I understood this answer correctly then the following would have worked on an Oracle DB.
SELECT Id, Title
FROM ( SELECT Id, Revision, MAX(Revision) OVER (PARTITION BY Id) LatestRevision FROM Task )
WHERE Revision = LatestRevision
I am using SQL Server (2005) and need a performant query to do the same.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我认为这应该有效(我没有测试)......
I think this should work (I didn't test it)...
请参阅这篇文章 ayende 评估最佳策略。
See this post by ayende for an ealuation of the Best strategies.
我会尝试创建一个像这样的子查询:
另一种选择是“作弊”并创建一个触发器,如果添加一个项目,该触发器会将修订标记为最新修订。
然后将该字段添加到索引中。 (我会将表链接到仅插入)
此外,ID 上的索引、Revision desc 也可以帮助提高性能。
I would try to create a subquery like this:
Another option is to "cheat" and create a trigger that will flag the revision as latest revision if one item is added.
Then add that field to the index. (I would link the table to insert only)
Also an index on ID, Revision desc could help the performance.
您发布的查询将在 SQL 2005(兼容模式 90)中运行,并更正语法错误:
The query you posted will work in SQL 2005 (in compatibility mode 90) with the syntax errors corrected:
试试这个:
输出:
try this:
OUTPUT: