Microsoft Access2000について質問です。

下のようなテーブルがあります。

商品  登録日    状態
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


この抽出方法を教えていただけないでしょうか。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/10/25 12:33:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:AketiJyuuzou No.3

回答回数5ベストアンサー獲得回数3

ポイント30pt

access2000で動かなかったらごめんなさい

select 商品,登録日,状態

from テーブル a

where 登録日 = (select max(b.登録日) from テーブル b

where b.商品 = a.商品);

id:db_Magician

回答ありがとうございます。

問題なく動きました。

とてもシンプルな式ですね…

2006/10/25 12:24:14

その他の回答3件)

id:mikkun24 No.1

回答回数21ベストアンサー獲得回数0

ポイント1pt

SELECT テーブル1.商品, Max(テーブル1.登録日) AS 登録日の最大,テーブル1.状態

FROM テーブル1

GROUP BY テーブル1.商品;

テーブル名は適宜直してください。

id:db_Magician

回答ありがとうございます。

ですが、この式はエラーになりますよね。

状態フィールドを表示できませんので…。

2006/10/25 12:06:07
id:rikuzai No.2

回答回数1366ベストアンサー獲得回数141

ポイント30pt

状態フィールドが不要であれば、商品フィールドをグループ化、登録日を最大値でグループ化したクエリーで算出できます。


元テーブルを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です。

(テーブル名、クエリー名は随時変更してください)


また、元テーブルに商品、登録日、状態の全てが同じレコードが存在した場合は、重複して表示されますのでご注意ください。


以上ご参考まで。

id:db_Magician

回答ありがとうございます。

内部結合で、2段階のクエリで抽出するのですね。

2006/10/25 12:11:55
id:AketiJyuuzou No.3

回答回数5ベストアンサー獲得回数3ここでベストアンサー

ポイント30pt

access2000で動かなかったらごめんなさい

select 商品,登録日,状態

from テーブル a

where 登録日 = (select max(b.登録日) from テーブル b

where b.商品 = a.商品);

id:db_Magician

回答ありがとうございます。

問題なく動きました。

とてもシンプルな式ですね…

2006/10/25 12:24:14
id:taknt No.4

回答回数13539ベストアンサー獲得回数1198

ポイント30pt

テーブルは「テーブル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

id:db_Magician

回答ありがとうございます。

問題なく抽出できました。

2006/10/25 12:30:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません