【问题标题】:TSQL retrieve maximum row based on a combination of the largest of other columnsTSQL 根据最大​​的其他列的组合检索最大行
【发布时间】:2012-07-07 09:22:23
【问题描述】:

我在 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 中编写查询来执行此操作有任何想法吗?如果您可以在不完成整个查询的情况下将我推向正确的方向,我将不胜感激。努力学习等等!

【问题讨论】:

  • 搜索如何使用ORDER BYTOP进行组合
  • 或者更好,因为你是2012年,使用ORDER BY和标准FETCH ONLY 1 ROW

标签: sql database tsql sql-server-2012


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    SELECT *
    FROM Version
    ORDER BY Major DESC, Minor  DESC, Revision  DESC 
      OFFSET 0 ROWS
      FETCH FIRST 1 ROW ONLY ;
    

    【讨论】:

      【解决方案3】:
      SELECT TOP 1 * FROM MyTable
      WHERE Major<=@MAJOR AND Minor<=@MINOR AND Revision<@REVISION
      ORDER BY Major DESC, Minor DESC, Revision DESC
      

      【讨论】:

        猜你喜欢
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2021-08-21
        • 2021-09-09
        • 1970-01-01
        • 2020-12-13
        相关资源
        最近更新 更多