Найти максимальное значение в столбце в SQL Server - PullRequest
0 голосов
/ 31 мая 2018

У меня есть база данных SQL Server, которая в настоящее время показывает данные в формате ниже

enter image description here

Как вы можете видеть, каждый проект имеет свой номер версии, хранящийся в базе данных,Я хочу, чтобы проект с последним номером версии и соответствующими датами отображался в отчетах.Поэтому я использовал Row_Number и Partition, но каким-то образом я не получаю результат, особенно когда помещаю свою CTE и логику раздела в хранимую процедуру.

Данные, которые мне нужны, представлены в формате ниже;

enter image description here

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Я бы использовал 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);
0 голосов
/ 31 мая 2018
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
0 голосов
/ 31 мая 2018

Коррелированный подзапрос обычно имеет хорошую производительность:

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

В частности, вы хотите индекс на (projectname, version) для оптимальной производительности.

...