我有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语句相同。

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

最佳答案

另一种选择是将与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)

10-07 19:57
查看更多