私は3つのテーブルを持っています:
Value v
+-------------------------------+
| Owner | Location | Value |
+-------------------------------+
|Bob | A1 | 0.25 |
|Bob | B4 | 0.10 |
|Dale | Z3 | 0.50 |
|Dale | A1 | 0.25 |
|Rick | B4 | 0.10 |
|Rick | Z3 | 0.50 |
+-------------------------------+
PurchasePercentage p
+-------------------------------+
| Buyer | Location | Percentage |
+-------------------------------+
|Bill | A1 | 0.10 |
|Bill | B4 | 0.20 |
|Kyle | Z3 | 0.30 |
|Kyle | A1 | 0.50 |
|Jan | B4 | 0.15 |
|Jan | Z3 | 0.25 |
+-------------------------------+
Buyout b
+------------------+
| Owner | Buyer |
+------------------+
|Bob | Bill |
|Bob | Kyle |
|Dale | Jan |
|Dale | Bill |
|Rick | Kyle |
|Rick | Jan |
+------------------+
私が探しているのは、4 番目のテーブルです。
PossibleBuyouts
+--------------------------------+
| Owner | Buyer | BuyoutCost |
+--------------------------------+
Buyout
表に示されているトランザクションに基づいています
。ここBuyoutCost
で、 はv.Value
*p.Percentage
の合計でありLocation
、Buyer
とOwner
が共通しています。
したがって、これらの例は次のPossibleBuyouts
表を返します
+--------------------------------+
| Owner | Buyer | BuyoutCost |
+--------------------------------+
|Bob | Bill | 0.045 |
|Bob | Kyle | 0.125 |
|Dale | Jan | 0.125 |
|Dale | Bill | 0.025 |
|Rick | Kyle | 0.150 |
|Rick | Jan | 0.140 |
+--------------------------------+
例として最初の行をレイアウトすると、数学は次のようになります。
-Bob と Bill は両方ともロケーション A1 と B4 を共有してい
ます -A1 に対する Bob の所有権の値は 0.25 で、Bill は 0.10% を望んでいます
-A1 のコストは (0.25*0.10) = 0.025 に
なります -B4 に対する Bob の所有権の値は 0.10 で、Bill は望んでいます0.20%
- B4 のコストは (0.10*0.20) = 0.020
-Sum(0.025 + 0.020) = 0.045 の BuyoutCost になります。
あなたが私を助けることができるなら、私はこれを行うための最も効率的な方法を探しています.
~1500 の異なる所有者、~1000 の異なる買い手、および ~500 の異なる場所があるため、潜在的な組み合わせの数によって、クエリ時間が非常に長くなります。これを行うための最速の方法は何だと思いますか? すべてにインデックスが付けられ、データは可能な限り最小のサイズに切り詰められます。