Problème d'efficacité sur une requête
Bonjour à tous 8O,
J'ai une requête sql à faire et je sollicite votre aide.
Pour simplifier, j'ai une base principale de contrats un id_client et une certaine date DATE_T.
BASE1 :
...
Id_client
DATE_T
J'ai une une autre base de contrats dans laquelle j'ai également un id_client ainsi que deux dates DATE_DEB et DATE_FIN
BASE2 :
Id_client
Prix1
Prix2
DATE_DEB
DATE_FIN
EN partant de BASE1 j'aimerais compter le nombre de contrats de la BASE2, la moyenne de Prix1 associées ainsi que celle de Prix2 vérifiant les 2 conditions suivantes :
BASE1.id_client = BASE2.id_client
BASE2.DATE_DEB <= BASE1.DATE_T <= BASE2.DATE_FIN
Je vous présente ma solution actuelle qui prend énormément de temps notamment à cause de la conditions sur les dates :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
CREATE TABLE Tab AS
SELECT
BASE1.*,
(SELECT count(*) FROM BASE2 WHERE BASE1.id_client = BASE2.id_client
AND BASE2.DATE_DEB <= BASE1.DATE_T <= BASE2.DATE_FIN) as NB_CT,
(SELECT mean(Prix1) FROM BASE2 WHERE BASE1.id_client = BASE2.id_client
AND BASE2.DATE_DEB <= BASE1.DATE_T <= BASE2.DATE_FIN) as Prix1Moy,
(SELECT mean(Prix2) FROM BASE2 WHERE BASE1.id_client = BASE2.id_client
AND BASE2.DATE_DEB <= BASE1.DATE_T <= BASE2.DATE_FIN) as Prix2Moy
FROM BASE1; |
J'aimerais savoir comment vous auriez codé cette requête car je dois vraiment abandonner cette méthode qui prend un temps fou :(.
J'ai pensé à utiliser la fonction OVER PARTITION BY mais sans succès.
Merci d'avance à ceux qui prendront le temps d'y jeter un œil.