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
どなたかお願いします。
前にも同じような質問をさせていただきましたが、
解決できずにこまっています。
No.1ベストアンサー
- 回答日時:
下記の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文実行の結果は添付画像を参照してください。
この回答への補足
ご回答ありがとうございます。
大変参考になりました。
この方法でできたと思ったんですが、新たに問題が出てきてしまいました。
TB1のレコードで稀に最新日付が同一のものがあり、その品番についてINNERJOINすると
あたりまえですがその品番だけ2行抽出されてしまいます。
このような品番が出た場合、金額が安いほうをとってきたいのですが、
なにか方法はありますでしょうか?
品番が重複するようなことはどうしても避けたいのです。
お手数ですがなにかよい方法があれば教えていただきたいです。
No.2
- 回答日時:
相関サブクエリを使っても出来ますね。
テーブルの定義は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
ご回答ありがとうございます。
初めて知る関数です。
なんか便利そうですね。
後学のために頭の中にとどめておきます。
また大変申し訳ないんですが、新たな問題が出てきてしまいました。
補足欄に追記させていただきましたので、
お時間があれば助けていただきたいです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 超難 日付に対するクロス集計 7 2021/12/06 20:56
- Visual Basic(VBA) VBAで指定期間の範囲を抽出し、リストボックスに表示したいです。 2 2021/12/20 23:21
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) ユーザーフォーム内のテキストボックスからオートフィルター抽出を行う方法 3 2021/12/13 19:58
- Visual Basic(VBA) 【VBA】ユーザーフォームを使った検索フォームについて 1 2021/12/01 21:56
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Access(アクセス) 複数のフィールドから条件を抽出 1 2021/11/19 08:29
- Visual Basic(VBA) マクロ 関数を使った抽出でエラーになってしまう 1 2022/02/01 14:44
- Access(アクセス) 【Access】Dcount関数の複数条件で順位を付ける方法について 1 2021/11/25 17:59
- Access(アクセス) Accessクエリで、予定した日付の分だけデータを出力したい 3 2021/10/27 04:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
指定した年月までのデータを取...
-
エクセルのヘッダーを変数で指...
-
PLSQL CHARの項目を使用した計算
-
日付書式に変換でこまっています!
-
LogParserを使用した前日分のイ...
-
oracle 文字列 01:45 を時間に...
-
Excelグラフの日付軸の日付がず...
-
日付の切り出し方法について
-
特定の日付が第何週目にあるか...
-
23時59分59秒までのデータを抽...
-
OSのシステム日付を変更して...
-
【VBA】「時間+日付.xls」ファ...
-
SQLite3のtext→date変換について
-
○ヶ月後の日付の自動算出方法
-
oracle 最新日付との比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの数値から時間に変換す...
-
今日の日付が入った行のデータ...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
ExcelのSUMPRODUCTで日付の範囲...
-
テーブルの主キーをdate型...
-
Excelグラフの日付軸の日付がず...
-
oracle 文字列 01:45 を時間に...
-
23時59分59秒までのデータを抽...
-
SQL スクリプトのご相談
-
WHERE句にて「30日前から今日ま...
-
指定した年月までのデータを取...
-
DB2のSQL(日付)について
-
yyyy/M/dをyyyy/MM/ddに変換
-
重複するIDのデータを1行にま...
-
日付型なら変数の先頭になん...
-
日付書式に変換でこまっています!
-
Excelの並び替え(先頭の文字以...
おすすめ情報