あなたが望むものを達成するための4つの異なる方法をリストしたsqlfiddleを作成しました。あなたの例に別の行を追加したことに注意してください。したがって、最大の日付を持つ 2 つの行があります。クエリの違いがわかりますか? Manoj の方法では、2 つの行が条件に一致しますが、1 つの行しか得られません。[実行計画の表示] をクリックすると、SQL Server がこれらのクエリを処理する方法の違いを確認できます。
4 つの異なる方法 (標準 SQL で記述されているため、すべての RDBMS で動作するはずです):
select A
from TAB
where
B = (select max(B) from TAB);
select top 1 * from tab order by b desc;
select
*
from
tab t1
left join tab t2 on t1.b < t2.b
where t2.b is null;
select
*
from
tab t1
inner join (
select max(b) as b from tab
) t2 on t1.b = t2.b;
ここでは、a_horse_with_no_name のおかげで、特に SQL Server 向けの 2 つの方法があります。
select *
from (
select a,
b,
rank() over (order by b desc) as rnk
from tab
) t
where rnk = 1;
select *
from (
select a,
b,
max(b) over () as max_b
from tab
) t
where b = max_b;
彼らがここで働いているのを見てください。