3

我在 SQL Server 2012 中有一个表,其中包含我的软件不同版本的补丁说明。该表如下所示:

VersionID int PrimaryKey Identity
Major tinyint
Minor tinyint
Revision tinyint
Patchnotes nvarchar(MAX)

我需要根据 Major、Minor 和 Revision 检索具有最新版本的行。例如,1.1.4 版在 1.1.3 版之后但在 1.2.1 版之前。

有人对如何在 TSQL 中编写查询来做到这一点有任何想法吗?如果您可以在不完成整个查询的情况下将我推向正确的方向,我将不胜感激。努力学习等等!

4

3 回答 3

4

我会按您的三个字段降序排序,然后记录一条记录:

SELECT TOP 1 VersionID, Major, Minor, Revision, Patchnotes
FROM VERSIONS
ORDER BY Major DESC, Minor  DESC, Revision  DESC

可以指定多个排序列。子句中排序列的顺序ORDER BY定义了排序结果集的组织。结果集按第一列排序,然后该有序列表按第二列排序,依此类推。

于 2012-07-06T22:13:08.547 回答
4

2012 版本已实现标准OFFSET / FETCH语法(在以前的版本中,您必须使用专有的TOP):

SELECT *
FROM Version
ORDER BY Major DESC, Minor  DESC, Revision  DESC 
  OFFSET 0 ROWS
  FETCH FIRST 1 ROW ONLY ;
于 2012-07-06T22:24:09.853 回答
-1
SELECT TOP 1 * FROM MyTable
WHERE Major<=@MAJOR AND Minor<=@MINOR AND Revision<@REVISION
ORDER BY Major DESC, Minor DESC, Revision DESC
于 2012-07-06T22:14:22.557 回答