[SQL]Probleme de condition sur un SELECT

Probleme de condition sur un SELECT [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 17-10-2008 à 18:09:26    

Bon il est possible que la solution soit simple et que vendredi tout çà .. bref
 
J ai un gros select avec plein de conditions sur 2 tables. Le soucis étant que pour le moment je n'ai pas une seule colonne commune entre ces 2 tables mais le rapprochement se fait avec 3 colonnes. Donc dans mon WHERE j'ai un beau :
 
 client.CP = periode.CP AND client.Codeclt = periode.Codeclt AND client.Enseigne = periode.Enseigne  
 
Grace à ces 3 conditions j'arrive a retrouver mes petits.
 
Mais çà se corse :
une des colonne selectionnées dans la table "periode" est une date, dans mon WHERE j'ai une autre des conditions qui est periode.Fin >= $daydate (pas besoin de vous l expliquer:o)
 
Jusque là tout va toujours bien dans le meilleur des mondes.
 
Maintenant j'aimerai extraire uniquement les 2 dates de "periode.Fin" les plus proche par magasin(sachant qu ici un magasin a une table client et une table periode donc, qui sont rapprochées comme expliqué plus haut par 3 conditions (oui je sais c'est moche mais çà c'est pas ma faute et ca sera corrigé prochainement)).
J ai laissé tomber le LIMIT puisque çà tri uniquement le résultat de toute la requête et non uniquement sur un critère.
 
Bref je crois que je suis marron ?

Reply

Marsh Posté le 17-10-2008 à 18:09:26   

Reply

Marsh Posté le 17-10-2008 à 19:04:25    

fonction analytique rank combinée avec un having. ça devrait le faire.
 
ou alors la bonne méthode du sous-select avec un limit 2 pour chaque magasin

Reply

Marsh Posté le 17-10-2008 à 19:05:22    

Tu peux expliquer stp ?

Reply

Marsh Posté le 17-10-2008 à 19:58:02    

ben t'as des fonctions selon les sgbd (mysql en a il me semble) qui permet par exemple d'établir un rang de lignes selon un critère de regroupement et un critère de tri.
 
genre group by client order by date. et ça va par exemple, pour la fonction rank() te donner un compteur de ligne 1, 2, 3 etc.
 
du coup t'as juste à coller un having rank() <= 2 et zou.
 
sinon, t'as toujours la solution des sous-requêtes comme je dis.
 
dans les deux cas, ça reste assez sioux à écrire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed