プロが教えるわが家の防犯対策術!

以下のデータ1(5件)に対してSQL文でSELECTを実行して結果(2件)が返ってくるようなSQL文はありませんでしょうか?
条件は県名の重複を排除して年月日の最新のもののみを持ってくるというものです。

【データ1】
(県名 年月日     金額)
埼玉  20090401 100
埼玉  20090402 100
埼玉  20090403 100
東京  20090501 100
東京  20090502 100

【結果】
(県名 年月日     金額)
埼玉 20090403 100
東京 20090502 100

DISTINCTや副問い合わせを考えたのですがうまいやり方が見つかりませんでした。
また、VBなどは使用せずSQL文のみを使用したいです。

お手数ですがよろしくお願いします。

A 回答 (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型ですよね?であれば全角文字で書くのはまずいですね
    • good
    • 0
この回答へのお礼

yambejpさん、ありがとうございます。

不十分な質問に親切に回答してくださって本当にありがとうございました。

いろいろテストしてみようと思います。

年月日はDATE型、金額はINT型です。
ご指摘ありがとうございます。

ありがとうございました。

お礼日時:2008/07/10 19:38

県名でグルーピングしてmaxを返せばよいのでは?



SELECT 県名,MAX(年月日) AS 年月日
FROM データ1
GROUP BY 県名

最新の場合の金額をひっぱりたならサブクエリが必要になります
今回は見た感じすべて同じ値なので、とくに調整していません。
こういう質問の際にはSQLのバージョンを付記してください
    • good
    • 0
この回答へのお礼

早急な回答ありがとうございました。

とても助かりました。

度々で申し訳ないですがデータを修正させてください。

【データ1】
(県名 年月日     金額)
埼玉  20090401 100
埼玉  20090402 200
埼玉  20090403 300
東京  20090501 400
東京  20090502 500

【結果】
(県名 年月日     金額)
埼玉 20090403 300
東京 20090502 500

このような場合、どうしたらよいでしょうか?
SQL*PLUSのバージョンは「9.2.0.1.0」です。

すみませんがよろしくお願いします。

お礼日時:2008/07/09 17:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A