- Ymox,
Bonjour à tous !
Je viens vers vous pour un problème qui tient en partie de l’algorithmique et aussi de ma compréhension des opérateurs IN
et NOT IN
en MySQL. Plus je tente de faire ça formellement, moins j’arrive à me convaincre que ce que je fais est correct, et que je m’en sortirai seul.
La situation est simple : j’ai des actifs financiers qui sont négociés avec différents comptes (qui eux sont des actifs d’un type particulier), le tout dans un portefeuille. Chaque jour, je dois calculer la nouvelle position (le montant total que ça représente) des différents actifs en fonction des quantité, prix à la clôture de la bourse et éventuel taux de change (aussi à la clôture de la bourse), et ce au niveau des comptes et du portefeuille.
L’idée que j’avais consiste à se baser sur les transactions de la journée. D’abord les renflouements sur les comptes (transactions de liquide), et ensuite les achats d’actifs (transactions d’actifs), qui se font toujours depuis un compte.
Reste que tous les actifs ne sont pas négociés tous les jours, et tous les comptes ne sont pas non plus utilisés tous les jours. Il me faut donc récupérer les positions de la veille pour ce qui n’a pas été concerné aujourd’hui, afin de les mettre à jour (en fait, je vais recréer un objet pour les nouvelles données, question d’historique, mais c’est un détail en ce qui nous occupe ici).
Ma question est la suivante : sachant que je garde trace des comptes et des actifs rencontrés dans les diverses transactions, comment récupérer les positions que je n’ai pas déjà mises à jour en traversant les transactions ?
Exemple : on a simplement deux comptes (c1 et c2) et deux actifs (a1 et a2), les actifs ayant été négociés avec les deux comptes dans le passé. Aujourd’hui, il y a eu une transaction pour chaque actif, mettons une transaction pour l’actif a1 avec le compte c1, et une transaction pour l’actif a2 avec le compte c2.
Comment récupérer les positions a1;c2 et a2;c1 ?
J’étais parti sur SELECT position p WHERE p.a NOT IN (a1, a2) AND p.c NOT IN (c1, c2)
, mais je me suis rendu compte que je n’allais rien récupérer. Avec un IN
, je vais tout récupérer. J’étais en train de réfléchir à utiliser un XOR
(si ça existe en SQL), mais je ne suis toujours pas sûr…
Est-ce que quelqu’un verrait une solution simple et efficace ?
Merci d’avance