我有一个SQL Server数据库,目前以下面的格式显示数据
如您所见,每个项目都有不同的版本号存储在数据库中。我想要做的是让项目在报告中显示最新版本号及其相关日期。因此我使用了Row_Number和Partition,但不知怎的,我没有得到结果,特别是当我将CTE和分区逻辑放入存储过程时。
我想要的数据格式如下;
答案 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