我有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
条件,那么结果表将在同一软件的更多行中使用不同的auditDate
和versionNumber
,但是我只需要每个软件的最新记录(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)