「最大値」ではなく「最大値の行」を取得するクエリのサンプル。

方法としてはとりあえず3つ思いつきました。

  • サブクエリでmax関数を使う方法
  • 相関サブクエリとnot existsを使う方法
  • rank関数を使う方法

わかりやすさとパフォーマンスで選択する感じですかね。

サンプルデータ

drop table if exists #Temp

select *
into #Temp
from (
	values
		(N'a', 1),
		(N'b', 2),
		(N'c', 3),
		(N'd', 2),
		(N'e', 3)
) as Value(Name, Value);

select * from #Temp;
/*
Name	Value
a	1
b	2
c	3
d	2
e	3
*/

サブクエリでmax関数を使う方法

select *
from #Temp
where [Value] = (
	select max([Value])
	from #Temp
);
/*
Name	Value
c	3
e	3
*/

相関サブクエリとnot existsを使う方法

select *
from #Temp as t1
where not exists(
	select *
	from #Temp as t2
	where t2.Value > t1.Value
);
/*
Name	Value
c	3
e	3
*/

rank関数を使う方法

with Cte
as(
	select
		*,
		rank() over (order by [Value] desc) as Rank
	from #Temp
)
select *
from Cte
where Rank = 1;
/*
Name	Value	Rank
c	3	1
e	3	1
*/