Bonjour à tous ,
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager