アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL MAX関数を検索条件にする。

わかる方がいれば助けてください。
下記のようなデータのテーブルあります。

  ID        品番      金額          日付
OUTLET 210  00182-1080   5600         20090915
OUTLET 214 00182-1080   5600         20090916
OUTLET 217 00182-1080   5600         20090917
OUTLET 50 00182-1080   5600         20090609
OUTLET 437 00191-1082   3300         20100305
BLK09SS703 00191-1082   5500         20090703
OUTLET 141 00191-1082   5500         20090717
OUTLET 170 00191-1082   5500         20090806

このテーブルデータの各品番について最新日付のデータのみを出力したいのですが、
方法がわかりません。group byでHAVING検索なども試しましたがうまくいきませんでした。

<抽出したいデータ>
  ID        品番      金額          日付
OUTLET 217 00182-1080   5600         20090917
OUTLET 437 00191-1082   3300         20100305

どなたかお願いします。
前にも同じような質問をさせていただきましたが、
解決できずにこまっています。

A 回答 (2件)

下記のSQL文を参照してください。



SELECT
TB1.ID ,
TB1.HINBAN , -- 品番(HINBAN) [ VARCHAR2(20) NULL ]
TB1.KINGAKU , -- 金額(KINGAKU) [ NUMBER(7,0) NULL ]
TB1.HIZUKE -- 日付(HIZUKE) [ VARCHAR2(8) NULL ]
FROM TEST_TABLE TB1
INNER JOIN( SELECT
HINBAN , -- 品番(HINBAN) [ VARCHAR2(20) NULL ]
MAX(HIZUKE) AS HIZUKE -- 日付(HIZUKE) [ VARCHAR2(8) NULL ]
FROM TEST_TABLE
GROUP BY HINBAN -- 品番(HINBAN) [ VARCHAR2(20) NULL ]
) TB2
ON TB1.HINBAN = TB2.HINBAN -- 品番(HINBAN) [ VARCHAR2(20) NULL ]
AND TB1.HIZUKE = TB2.HIZUKE -- 日付(HIZUKE) [ VARCHAR2(8) NULL ]

注:SQL文実行の結果は添付画像を参照してください。
「SQL MAX関数を検索条件にする。」の回答画像1

この回答への補足

ご回答ありがとうございます。
大変参考になりました。
この方法でできたと思ったんですが、新たに問題が出てきてしまいました。
TB1のレコードで稀に最新日付が同一のものがあり、その品番についてINNERJOINすると
あたりまえですがその品番だけ2行抽出されてしまいます。
このような品番が出た場合、金額が安いほうをとってきたいのですが、
なにか方法はありますでしょうか?
品番が重複するようなことはどうしても避けたいのです。

お手数ですがなにかよい方法があれば教えていただきたいです。

補足日時:2010/05/27 11:29
    • good
    • 0
この回答へのお礼

すいません。
Group Byの存在を忘れてました。
無事解決しました。

ありがとうございます。 

お礼日時:2010/05/27 12:13

相関サブクエリを使っても出来ますね。


テーブルの定義は1の方と同じとして、下記の様になります。

例) --------------------------------------------------
SELECT * FROM TEST_TABLE a
WHERE
NOT EXISTS (
SELECT 1 FROM TEST_TABLE b WHERE a.HINBAN = b.HINBAN AND a.HIZUKE < b.HIZUKE
)
------------------------------------------------------

「各品番について最新日付のデータ」は以下の様に読み替えられます。
「『同じ品番でより新しい日付の別のデータ』が無いデータ」
これをSQLで表現していることになります。

参考URL:http://codezine.jp/article/detail/1076?p=2
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
初めて知る関数です。
なんか便利そうですね。
後学のために頭の中にとどめておきます。

また大変申し訳ないんですが、新たな問題が出てきてしまいました。
補足欄に追記させていただきましたので、
お時間があれば助けていただきたいです。
よろしくお願いします。

お礼日時:2010/05/27 11:35

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