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

質問

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」です。

すみませんがよろしくお願いします。
 
最新から表示回答順に表示