質問 |
||
| QNo.4162954 | SQL文で複数の項目のうちひとつの項目のみの重複を排除する方法を教えてください。 | |
|---|---|---|
| 質問者:zibika |
以下のデータ1(5件)に対してSQL文でSELECTを実行して結果(2件)が返ってくるようなSQL文はありませんでしょうか? 条件は県名の重複を排除して年月日の最新のもののみを持ってくるというものです。 【データ1】 (県名 年月日 金額) 埼玉 20090401 100 埼玉 20090402 100 埼玉 20090403 100 東京 20090501 100 東京 20090502 100 【結果】 (県名 年月日 金額) 埼玉 20090403 100 東京 20090502 100 DISTINCTや副問い合わせを考えたのですがうまいやり方が見つかりませんでした。 また、VBなどは使用せずSQL文のみを使用したいです。 お手数ですがよろしくお願いします。 |
|
困り度:
|
||
| 質問投稿日時: 08/07/09 13:12 |
||
回答 |
|
| ANo.2 | 今回の内容であればこんな感じでいけるでしょう SELECT d1.県名,d2.年月日,d1.金額 FROM データ1 AS d1 INNER JOIN ( SELECT 県名,MAX(年月日) AS 年月日 FROM データ1 GROUP BY 県名 ) AS d2 ON d1.県名=d2.県名 AND d1.年月日=d2.年月日 ちなみにここはMySQLのカテゴリなのでSQL*PLUSはカテ違いかも・・・ それと、データ型がはっきりしないのですが、年月日はDATE型 金額はINT型ですよね?であれば全角文字で書くのはまずいですね |
|---|---|
| 回答者:yambejp | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/07/09 18:10 |
|
| |
| この回答へのお礼 | yambejpさん、ありがとうございます。 不十分な質問に親切に回答してくださって本当にありがとうございました。 いろいろテストしてみようと思います。 年月日はDATE型、金額はINT型です。 ご指摘ありがとうございます。 ありがとうございました。 |
回答 |
|
| ANo.1 | 県名でグルーピングしてmaxを返せばよいのでは? SELECT 県名,MAX(年月日) AS 年月日 FROM データ1 GROUP BY 県名 最新の場合の金額をひっぱりたならサブクエリが必要になります 今回は見た感じすべて同じ値なので、とくに調整していません。 こういう質問の際にはSQLのバージョンを付記してください |
|---|---|
| 回答者:yambejp | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/07/09 13:21 |
|
| |
| この回答へのお礼 | 早急な回答ありがとうございました。 とても助かりました。 度々で申し訳ないですがデータを修正させてください。 【データ1】 (県名 年月日 金額) 埼玉 20090401 100 埼玉 20090402 200 埼玉 20090403 300 東京 20090501 400 東京 20090502 500 【結果】 (県名 年月日 金額) 埼玉 20090403 300 東京 20090502 500 このような場合、どうしたらよいでしょうか? SQL*PLUSのバージョンは「9.2.0.1.0」です。 すみませんがよろしくお願いします。 |