在SQL Server中的列中查找最高值

时间:2018-05-31 11:44:08

标签: sql sql-server sql-server-2008 sql-server-2012

我有一个SQL Server数据库,目前以下面的格式显示数据

enter image description here

如您所见,每个项目都有不同的版本号存储在数据库中。我想要做的是让项目在报告中显示最新版本号及其相关日期。因此我使用了Row_Number和Partition,但不知怎的,我没有得到结果,特别是当我将CTE和分区逻辑放入存储过程时。

我想要的数据格式如下;

enter image description here

3 个答案:

答案 0 :(得分:1)

我会使用subquery

select t.*
from table t
where version# = (select max(t1.version#) 
                  from table t1 
                  where t1.projectname = t.projectname
                  );

但是,您也可以使用row_number()功能:

select top (1) with ties *
from table t
order by row_number() over (partition by projectname order by version# desc);

答案 1 :(得分:0)

相关子查询通常具有良好的性能:

select t.*
from t
where t.version = (select MAX(t2.version) from t t2 where t2.projectname = t.projectname);

特别是,您需要(projectname, version)上的索引才能获得最佳效果。

答案 2 :(得分:-2)

SELECT p.projectname, p.versionno,p.startdata,p.enddate 
FROM project p 
INNER JOIN 
( SELECT projectname, MAX(startdate) MaxDate 
FROM project GROUP BY projectname ) 
Dates ON p.projectname = Dates.projectname
 AND p.startdate = Dates.MaxDate