私は自分の仕事にMSアクセスを使用しており、自分自身を解決するには時間がかかっていた問題があるので、私はあなたに頼むことにしました。質問は次である: 私は価格のための2つのテーブルを持っている:a_pricesデータベース価格表集計の問題
article5 a_price from_date to_date
00009 952.00 01/01/2012 31/12/2013
00009 720.00 01/01/2014 31/12/2015
00009 750.00 01/01/2016 31/12/2199
とa_client_prices
client_id article5 a_price from_date to_date
1 00009 700 31/12/2014 11/09/2015
2 00009 800 05/10/2015 07/04/2016
問題が入力ので、もし、正確なクライアントのために価格のテーブルを返すクエリを作成することです
article5 a_price from_date to_date
00009 952.00 01/01/2012 31/12/2013
00009 720.00 01/01/2014 30/12/2014
00009 700 31/12/2014 11/09/2015
00009 720.00 12/09/2014 31/12/2015
00009 750.00 01/01/2016 31/12/2199
そして= 2 CLIENT_IDの場合:
"どこのclient_id = 1" 結果のテーブルは、次のようになりました、そのクエリのarticle5 a_price from_date to_date
00009 952.00 01/01/2012 31/12/2013
00009 720.00 01/01/2014 04/10/2015
00009 800 05/10/2015 07/04/2016
00009 750.00 08/04/2016 31/12/2199
だから、クエリ内a_client_pricesが高い優先順位を持ってオーバーラップを除くメカニズム、のようなものがあるはずですが、私は、集約、その後、毎日のレコードが含まれているテーブルを結合するよりも良い事を想像して、過剰なレコードを除外することができず、それは期間に戻ります。
私はmsアクセスを使用しているので、私は簡単にカスタム集約関数を使用することができます。私はそれが解決策の一つかもしれないと感じていますが、自分自身を設計する方法を理解するには、その分野での経験が乏しいです。事前にあなたの助けをありがとう、申し訳ありません私はその前に投稿された答えを逃した場合。最初のデータ編成を自由に判断し、他の可能性を提案してください。
P.S.日々の集計を行うソリューションは完全に機能していますが、処理時間がかかり過ぎてクエリがあまりにも多く使われるため、このソリューションは拒否されました。
これらの価格の使い方によっては、可能な日付ごとに価格設定を完全に表示する必要はありません。 VBAを使用して、対応する 'a_price'を返すカスタムルックアップ関数、たとえば' LookupPrice(client_ID、article5、effective_date) 'を作成することができます。 –
a_client_pricesが発生する前に、テーブルa_priceを使用して他のデータテーブルとのクエリに参加させました。私にとって明白な解決策は、サブクエリと同じインターフェイスを作り直して代わりに使用することでしたが、時間と私はまだ大規模なその遅さのためにクエリとルックアップ機能の実装の不可能性のために一時テーブルとVBAを避けたい。私がテストしている最後のアイデアは、両方のテーブルを結合し、必要な順序で値を取ることです(レコードがa_client_pricesでnullでない場合はa_priceを取り、それ以外の場合はa_pricesからレコードを取ります)。 – tamat
両方のテーブルを結合することで解決策について悪いことは、今私は新しい結合を含むためにほぼ20のクエリを書き直さなければならないということです。しかし、私はこのスレッドで何度も叫んだので、簡単に解決できるソリューションがないと思われます。あなたのアドバイスをお寄せいただきありがとうございます。私が多くのことを気に入らなくてもこのオプションを忘れてしまったからです。 – tamat