sql - 组合选择前 1 个 SQL 语句

标签 sql sql-server tsql ssms union

我有 4 个选择语句:

SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software1' order by auditDate desc
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software2' order by auditDate desc
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software3' order by auditDate desc
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software4' order by auditDate desc

目前,每个 select 语句返回一个包含一行的表,如下所示:

   software  | auditDate  | versionNumber
1| software1 | 8/22/2017  | 5.0

如果 top 1 条件不存在,则结果表将包含具有不同 auditDateversionNumber 的相同软件的更多行>,但我只需要每个软件的最新记录 (auditDate)。

我想将所有这些 select 语句合并到一个查询中,该查询返回一个与此类似的表:

   software  | auditDate  | versionNumber
1| software1 | 8/22/2017  | 5.0
2| software2 | 8/20/2017  | 5.3
3| software3 | 8/21/2017  | 4.9
4| software4 | 8/16/2017  | 5.6

其中每一行与上面的单个 select top 1 语句相同。

由于 order by 子句,UNION 似乎不起作用,我对其他解决方案感到困惑。

最佳答案

另一个选项是使用WITH TIES 子句

Select top 1 with ties 
       software, auditDate, versionNumber 
 From  table1 
 Where software IN ('software1','software2','software3','software4')
 Order By Row_Number() over (Partition By software Order By auditDate Desc)

关于sql - 组合选择前 1 个 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45821615/

相关文章:

c# - 存储过程中使用的 TSQL 函数强制列为只读

sql-server - sp_ExecuteSql : The parameterized query expects the parameter @XX, 未提供

sql - 如何将数据分成两列

sql - t-sql表列到字符串

sql - 加入两个子查询或一个查询与一个子查询 SQL Server 2008

sql - 成绩数据库表

sql - 函数 OBJECT_ID 的第二个参数

sql - 如何追踪程序执行时间?

mysql - 导入mysql数据库时出现doctype相关错误

mysql - SQL 仅选择列上具有最大值的行