下のようなテーブルがあります。
商品 登録日 状態
A111 2006/10/01 01
A111 2006/05/01 10
A111 2006/10/20 03
B111 2006/09/30 05
B111 2006/04/01 12
C111 2006/10/01 00
…
同じ商品コードがいくつか登録されていますが、この中から
登録日がもっとも最新の商品のレコードのみを抽出したいのです。
商品 登録日 状態
A111 2006/10/20 03
B111 2006/09/30 05
C111 2006/10/01 00
…
この抽出方法を教えていただけないでしょうか。
よろしくお願いします。
access2000で動かなかったらごめんなさい
select 商品,登録日,状態
from テーブル a
where 登録日 = (select max(b.登録日) from テーブル b
where b.商品 = a.商品);
SELECT テーブル1.商品, Max(テーブル1.登録日) AS 登録日の最大,テーブル1.状態
FROM テーブル1
GROUP BY テーブル1.商品;
テーブル名は適宜直してください。
回答ありがとうございます。
ですが、この式はエラーになりますよね。
状態フィールドを表示できませんので…。
状態フィールドが不要であれば、商品フィールドをグループ化、登録日を最大値でグループ化したクエリーで算出できます。
元テーブルをTable_1とするとSQL文はこんな感じです。
SELECT Table_1.商品, Max(Table_1.登録日) AS 登録日の最大
FROM Table_1
GROUP BY Table_1.商品;
これに状態フィールドを結びつける必要があるので、
↑のクエリーを元に商品フィールドと登録日フィールドの最大値の両方をキーにして、
元テーブルからデータを抽出するクエリーを作成します。
↑のクエリーをQ_1として、
SELECT Table_1.商品, Table_1.登録日, Table_1.状態
FROM Table_1 INNER JOIN Q_1 ON (Table_1.登録日 = Q_1.登録日の最大) AND (Table_1.商品 = Q_1.商品);
というSQL文でご希望のデータが表示されると思います。
尚、↑のSQLはクエリー作成画面で「表示」→「SQLビュー」にして、
貼り付ければOKです。
(テーブル名、クエリー名は随時変更してください)
また、元テーブルに商品、登録日、状態の全てが同じレコードが存在した場合は、重複して表示されますのでご注意ください。
以上ご参考まで。
回答ありがとうございます。
内部結合で、2段階のクエリで抽出するのですね。
access2000で動かなかったらごめんなさい
select 商品,登録日,状態
from テーブル a
where 登録日 = (select max(b.登録日) from テーブル b
where b.商品 = a.商品);
回答ありがとうございます。
問題なく動きました。
とてもシンプルな式ですね…
テーブルは「テーブル2」という名称にしてあります。
それで クエリで 新規デザインビューにして デザイン状態にして テーブルの追加を 閉じてから 表示、SQLビューで 以下の SQLを コピペすればOKです。
SELECT テーブル2.商品,テーブル2.登録日 as 登録日の最大, テーブル2.状態
FROM テーブル2
,(SELECT テーブル2.商品 as a, Max(テーブル2.登録日) AS b
FROM テーブル2
GROUP BY テーブル2.商品) as c
where
テーブル2.商品 = c.a and
テーブル2.登録日 = c.b
回答ありがとうございます。
問題なく抽出できました。
回答ありがとうございます。
問題なく動きました。
とてもシンプルな式ですね…