ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3811426 同一名は、最大値を!
質問者:sadoru お世話になっております。

Aテーブル
NO 名前 データ1 データ2
1  aaa  10 100
2  aaa 20 120
3   ccc 30 130
4 ddd 40 140

上記のテーブルがあった際に、同一の名前の場合は最大値のデータを取ることをしたい場合はどのようにしたらよろしいでしょうか?
下記の通りの出力結果が希望です。

NO 名前  データ1 データ2
2 aaa 20 120
3 ccc 30 130
4 ddd 40 140


Distinct ではなく、GROUP BY で解決したいと思います。またGROUP BY以外にも方法が御座いましたら宜しくお願い致します。
困り度:
  • 困っています
質問投稿日時:
08/02/26 14:55
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.2 説明が分かりづらいですね。

また、仕様を提示して、SQLを作ってもらうというのは、ここでは「質問でなく、作業依頼」として削除される場合があります。
ここでは、自分で考えた上で、具体的に何が分からないかを示して質問することになっています。

1.名前ごとにデータ1の値が最大の行を検索
select *
from A as X
where データ1=(select max(データ1)
from A
where 名前=X.名前)
order by NO

2.名前ごとに日付が最新の行を検索
select *
from A as X
where 日付=(select max(日付)
from A
where 名前=X.名前)
order by NO
回答者:chukenkenkou
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
08/02/28 17:43
この回答へのお礼ご返信ありがとうございます。
説明がわかりづらかったみたいですね。 申し訳御座いません。
ご指摘頂いたことに関しまして、勉強になりました。ありがとうございます。

さて、本題ですが、質問が悪かったにもかかわらず、明確なご回答を頂きまして感謝しています。
ありがとう御座います。
解決致しました。

回答良回答10pt

ANo.1 >最大値のデータ

というのがちょっと微妙にわかりにくい表現ですが

  select max(NO), [名前], max([データ1]), max([データ2]) from テーブル group by [名前];

ではダメだったですか?
回答者:shimix
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/02/26 15:13
この回答への補足お返事ありがとうございます。

分かりにくい表現で申し訳御座いません。 
同一の名前でしたら、データ1が最大の人の名前を選択する方法が知りたいです。

また次に同様の条件で、下記の場合はどのように解決できますでしょうか?

Aテーブル
NO 名前 データ1 データ2  日付
1  aaa  10 100    2008/1/20
2  aaa 20 120 2008/2/10
3   ccc 30 130 2008/1/20
4 ddd 40 140 2008/1/24

同一の名前がありましたら、日付が一番最新の行を選択。下記が出力結果です。

Aテーブル
NO | 名前 | データ1 | データ2 | 日付
2 |  aaa | 20 | 120 | 2008/2/10
3 | ccc | 30 | 130 | 2008/1/20
4 | ddd | 40 | 140 | 2008/1/24

よろしくお願いします。
この回答へのお礼この回答にお礼をつける(質問者のみ)