質問: ### 前提・実現したいこと microsoft Accessで、データ加工をしている。 2つのテーブルがあり、クエリによって テーブルBの[基準日付]欄にテーブルA[参照日付]から情報を参照したい。 参照する情報は[誕生日]より古い日付の内、最も新しい日付にしたい。 この場合、どのようにクエリを組むべきか、試行錯誤しているが上手くいかない。 ■テーブルA [参照日付] 2000/1/1 2001/5/1 2002/11/1 2003/3/1 2004/5/1 2005/12/1 ■テーブルB [氏名][誕生日][基準日付] A 2003/5/1 空欄 B 2004/5/4 空欄 C 2006/4/9 空欄 ■クエリ [氏名][誕生日][基準日付] A 2003/5/1 2003/3/1 B 2004/5/4 2004/5/1 C 2006/4/9 2005/12/1 ### 発生している問題・エラーメッセージ ``` 「Expr1001」という列が新規作成される上、[基準日付]が出力されない。 ``` ### 該当のソースコード 下記のようなクエリを作成した。 ``` SELECT テーブルB.*, DMAX( "参照日付", "テーブルA", "参照日付 <= " & [テーブルB].[誕生日] ) FROM テーブルB ``` ### 試したこと SELECT テーブルB.*, DMAX( "参照日付", "テーブルA", "参照日付 >= " & [テーブルB].[誕生日] ) FROM テーブルB とすると、全ての行の「Expr1001」に「2005/12/1」と入る。 ### 補足情報(FW/ツールのバージョンなど) Access2007-2010 よろしくお願いいたします。
回答: テーブルB に [基準日付] というフィールドがあって、 そのフィールドに[誕生日]以前の最新の[参照日付]を 入力したいということですね。 だとするなら、更新クエリになります。 下記クエリを1回実行してから、テーブルBを開いてください。 ``` UPDATE テーブルB SET テーブルB.基準日付 = DMax("参照日付","テーブルA","参照日付<=#" & Format([誕生日],"yyyy/mm/dd") & "#"); ``` ちなみに、サブクエリを使うと更新不可のクエリになるので、更新クエリでは使えないですね。