Bonjour à tous,
Je suis nouvelle dans ce forum , et me décide enfin à vous poser la question sur laquelle je bute depuis presque 2 jours...
J'ai une base avec une table CLIENT(IDCLIENT, nom, prenom, adr, cp, ville, pays, ...) et une table RDV_LIGNE(IDRDV_LIGNE, IDCLIENT, date_rdv, heure_rdv, index, inter_rdv_annulé, ...)
Les 2 sont reliées via la clé étrangère IDCLIENT dans RDV_LIGNE.
Un client peut avoir (0,n) RDV_LIGNE; un rdv n'appartient qu'à un seul client.
La rubrique index de RDV_LIGNE me permet d'avoir un n° de rdv croissant (pour faciliter le tri); vous pouvez utiliser la date si vous préférez.
Je sais que ma question a déjà été posée plusieurs fois (et j'ai trouvé grâce à vous un début de réponse), mais j'ai besoin d'aller plus loin que ce que j'ai pu trouver :
Je dois afficher un listing de tous les clients avec les données de leur dernier rdv, selon plusieurs critères sur les 2 tables.
J'ai réussi à avoir la liste du dernier rdv de chaque client avec cette requête :
=> Cette requête me renvoie le bon nb d'enregistrements, et les bonnes valeurs, mais il me manque des infos car comme je dois sortir un listing il me faut toutes les coordonnées du client, ainsi que du rdv.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT rv_max.IDCLIENT, c.nom1cli, rv_max.max_index FROM CLIENT c INNER JOIN (SELECT IDCLIENT, MAX(INDEX) AS max_index FROM RDV_LIGNE GROUP BY IDCLIENT) rv_max ON rv_max.IDCLIENT=c.IDCLIENT
De plus, j'ai besoin de rajouter des conditions, à la fois sur client et sur rdv, et je suis bloquée par le group by pour les conditions sur le rdv (par exemple, exclusion des rdv annulés)
J'ai également trouvé une autre méthode :
=> Cette requête me permet de récupérer toutes les rubriques dont j'ai besoin et je peux même mettre des conditions, donc tout va bien sauf que c'est beaucoup, beaucoup, beaucoup trop long... (même avec les critères de restrictions).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT rv.IDCLIENT, c.nom1cli, c.prenom1cli, c.cp1cli, rv.INDEX, rv.date_dbt_rdv, rv.heure_dbt_rdv FROM CLIENT c INNER JOIN RDV_LIGNE rv ON c.IDCLIENT=rv.IDCLIENT WHERE rv.INDEX = (SELECT MAX(rv_max.INDEX) FROM RDV_LIGNE rv_max WHERE rv_max.IDCLIENT=rv.IDCLIENT GROUP BY rv_max.IDCLIENT) AND rv.inter_rdv_annule=0 AND rv.DATE_dbt_rdv BETWEEN '20120901' AND '20120930' AND c.nompays='FRANCE' AND c.dep1cli='32'
Je ne vous ai pas précisé (et ça risque de ne pas vous plaire), mais je travaille avec Windev et une base HyperFile classic.
Auriez-vous une autre requête à me proposer afin de solutionner mon pb ?
En vous remerciant d'avance !
Partager