SQLのお勉強、グループごとにある最大値の行を取得する

/*SQLのお勉強、グループごとにある最大値の行を取得する
参考サイト
https://qiita.com/nogitsune413/items/f413268d01b4ea2394b1

考え方は、グループの中で最大を取得する。しかしこのテーブルだけでは、
他の情報氏名が得られないので、もとのテーブルとINNERJOINをして得る
つまり2段階方式

SQLで困るのは、C言語のようにフロー的な考え方ではなくて、
まとまった捉え方で出力される。
C言語のプログラム開発に慣れた人がSQLでクエリを書こうとすると
わからなくなるのはループ的な考え方が全く違うからだ。
クエリでは、処理を内部で全部実行してくれるが、C言語は自分で全部
処理する必要があるのでそのギャップがあって、クエリを作るときに
わからなくなってしまう。
でもクエリとストアドプロシジャを勉強してみてわかったのは
DB関連は、クエリとストアドプロシジャでがんばって書いたほうが効率がよい。
無理にC言語やJAVAでデータを配列にするよりもずっと早いし、修正が楽。
たぶんこれは、実際に経験しないとわからないと思う。
特に、複数の言語を勉強していない人にとってはできるだけ労力をかけずに1つの言語を
深く掘り下げようとするから。
でもDBに関しては、その道の言語を深く掘り下げたほうが効率が良いと思う。
ストアドプロシジャを2年ほど勉強しているおっさんの独り言だった。
*/
–基本的な考え方として、グループの中で最大値を出力する。しかし誰かはわからない
元データ

 Name	Age	City
坂本	19	東京
中原	50	大阪
山岡	6	東京
赤橋	42	北海道
西	69	大阪
SELECT TOP 10 City,max(age) as MaxAge FROM Member
Group BY City

これだと氏名がわからないので誰かわからない。

City	MaxAge
大阪	69
東京	19
北海道	42

–グループごとにある最大値の行を取得する

SELECT TOP 10 Member.City,Member.Name,Member.Age FROM Member INNER JOIN 
(
	SELECT TOP 10 City,max(age) as MaxAge FROM Member
		Group BY City
) as memberB
 ON	Member.City = memberB.City--都市名が同じ
	Where
		member.age = memberB.MaxAge--最大年齢と一致
ORDER BY AGE DESC
結果
City	Name	Age
大阪	西	69
北海道	赤橋	42
東京	坂本	19

こちらの記事もどうぞ