I ont trois tables:valeurs de retour de deux tables à partir d'une troisième table "clé", puis en multipliant les valeurs et la somme des produits
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 |
+------------------+
Ce que je suis à la recherche est une quatrième table:
PossibleBuyouts
+--------------------------------+
| Owner | Buyer | BuyoutCost |
+--------------------------------+
sur la base des opérations prévues dans le tableau Buyout
où BuyoutCost
est la somme de v.Value
* p.Percentage
pour chaque Location
le Buyer
et le Owner
ont en commun.
Ainsi, ces exemples retourneraient une table PossibleBuyouts
de
+--------------------------------+
| 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 |
+--------------------------------+
pose la première ligne à titre d'exemple, les travaux mathématiques comme ceci:
-Bob et Bill deux ont des emplacements A1 et B4 en commun
la valeur de la propriété de -Bob pour A1 est de 0,25 et le projet de loi veut 0,10 pour cent
-le coût pour A1 serait (0,25 * 0,10) = 0,025
la valeur de la propriété de -Bob pour B4 est de 0,10 et le projet de loi veut 0.20%
-le coût pour B4 serait (0.10 * 0.20) = 0.020
-Somme (0.025 + 0.020) = le BuyoutCost de 0.045. Si vous pouvez m'aider, je cherche le moyen le plus efficace de le faire - qu'il s'agisse de plusieurs requêtes, une requête avec un groupe de sous-requêtes, ce qui devrait prendre le moins de temps possible. Il ya ~ 1500 propriétaires différents, ~ 1000 acheteurs différents et ~ 500 emplacements différents, de sorte que le nombre de combinaisons possibles conduit à des temps de requête looooooong. Que pensez-vous sera le moyen le plus rapide de le faire? Tout est indexé et les données réduites à la plus petite taille que je peux l'obtenir.
Ok, avez-vous fait des recherches et cela semble logique - je suis assez nouveau dans les bases de données et mysql cependant - aider à l'apparence de ce code? – Rocky
Ajout d'un SP complet qui recrée la solution pour vos données d'exemple. S'il vous plaît allez-y attentivement et tester pour s'assurer qu'il fait ce que vous attendez de faire. –
Génial, cela a fait l'affaire. La seule chose que je devais corriger était la requête quittant la boucle chaque fois qu'il n'y avait pas de correspondance de localisation pour un ensemble donné de propriétaire et d'acheteur. Cette fois-ci, j'ai été capable d'éliminer ces ensembles de la table avant d'exécuter la requête, mais de toute évidence, ce n'est pas une vraie solution - comment vous y prendrez-vous de la bonne façon? Merci pour l'aide! – Rocky