• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS 商品毎の最新の単価を設定するには?)

最新の単価設定方法

このQ&Aのポイント
  • 質問文では、運用しているデータベースの不具合に関して、商品毎の最新の単価を設定したいという要望があります。
  • 現在運用しているデータベースでは、クエリ内の集計で"最後"を使用して最新の単価を取得していますが、信頼性に欠けることが判明しました。
  • 故に、商品ID毎に最新の変更日に基づく最新の単価をクエリする方法を教えていただきたいという質問です。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

説明しておきますと、T単価マスタに登録されているものの すべてについて商品を取得し、それぞれの商品で更新日が もっとも最近のものを表示する、ということです。 商品名はT_商品マスタから取り込んでいます。 T1というのはT_単価マスタの別名でこれは同じT_単価マスタ にすることはできません。したがって、WHERE句のところ だけを変更するということでなく、このSQL文全体で 最新のデータを取得する、ということです。

Gntym
質問者

お礼

とてもご丁寧に有難うございます。 コードを貼付したところ、クエリ上"仕入価格"では無く"定価"が表示されましたので、デザインビューで入れ替えしました。 結果必要なクエリ結果を得ることができました。 この構成を噛み砕いて今後活用させて頂きたいと思います。 ご対応に感動いたしました。 心から感謝いたします。

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

失礼しました。コードの張り間違いです。 SELECT T1.商品ID, T_商品マスタ.商品名1, T_商品マスタ.商品名2, T1.販売単価, T_商品マスタ.定価, T1.変更日 FROM T_単価マスタ AS T1 INNER JOIN T_商品マスタ ON T1.商品ID = T_商品マスタ.商品ID WHERE (((T1.変更日)=(SELECT Max([T_単価マスタ].[変更日]) AS 変更日の最大 FROM T_単価マスタ GROUP BY T_単価 マスタ.商品ID HAVING T_単価マスタ.商品ID=T1.商品ID))) ORDER BY T1.商品ID; これで大丈夫と思います。 何かあれば書き込んでください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

追加説明です。 >仕入単価及び販売価格が[T_単価マスタ]の最新のもの ということですので最新ということは確かに最後に 記録したデータということですが、最新は一番 新しい日付ということでその場合はSQL文にも 書いているように、 Max(変更日) で最新の日付をとりだします。 なお、掲載したSQL文はQ_商品最終単価の形に なっています。 提示されたデータをもとに作成したもので、多分 イメージされているものと合致していると思いますが。

Gntym
質問者

お礼

補足欄を無駄に使用してしまったみたいで、"お礼"欄で失礼します。 まず、SQL文をクエリに貼り付けてみたところ、特定の1アイテムの最新の単価が表示されたのみで、全て(商品ID一覧)表示されませんでした。 イメージとしては [Q_商品最終単価] 0002   うどん   讃岐    150     300     2010/01/25 11:12:50 このように1行だけ表示された状況です。 甘えてコピペそっくりしており、デザインビューでの"変更日"項目の抽出条件には In (SELECT Max(変更日) FROM T_単価マスタ INNER JOIN T_商品マスタ ON T_単価マスタ.商品ID=T_商品マスタ.商品ID) という式となりました。 テーブルのリレーションは T_商品マスタ:T_単価マスタ=1:多 となっています。 T_商品マスタの持つ全てのレコードに対してT_単価マスタの最新の単価が拾えるように教えていただけると幸いです。

Gntym
質問者

補足

ご回答有難うございます。 反応が遅くて申し訳ありません。 現在は作業にかかれる時間を調整しております。 ご回答の内容で検証後、結果を報告いたしますので、遅レスをお許し願います。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

"最後" ではなく "最大" を使用してください。

Gntym
質問者

補足

ご回答有難うございます。 以前検証したことはありますが、変動あるこの値は常に最新=最大ではないので目的の値は取得できませんでした。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

このようなものでどうでしょうか。 SELECT T_単価マスタ.商品ID, T_商品マスタ.商品名1, T_商品マスタ.商品名2, T_単価マスタ.仕入単価, T_単価マスタ .販売単価, T_単価マスタ.変更日 FROM T_商品マスタ INNER JOIN T_単価マスタ ON T_商品マスタ.商品ID = T_単価マスタ.商品ID WHERE (((T_単価マスタ.変更日) In (SELECT Max(変更日) FROM T_単価マスタ INNER JOIN T_商品マスタ ON T_単価マ スタ.商品ID=T_商品マスタ.商品ID))); 貼り付けがずれているかもしれませんが。 修正してください。 回答がずれていたらスルーしてください。

関連するQ&A