- ベストアンサー
同一名は、最大値を!
お世話になっております。 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以外にも方法が御座いましたら宜しくお願い致します。
- みんなの回答 (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
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
>最大値のデータ というのがちょっと微妙にわかりにくい表現ですが select max(NO), [名前], max([データ1]), max([データ2]) from テーブル group by [名前]; ではダメだったですか?
補足
お返事ありがとうございます。 分かりにくい表現で申し訳御座いません。 同一の名前でしたら、データ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 よろしくお願いします。
お礼
ご返信ありがとうございます。 説明がわかりづらかったみたいですね。 申し訳御座いません。 ご指摘頂いたことに関しまして、勉強になりました。ありがとうございます。 さて、本題ですが、質問が悪かったにもかかわらず、明確なご回答を頂きまして感謝しています。 ありがとう御座います。 解決致しました。