Requete SQL

Résolu
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -  
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je voulais savoir si il était possible de mettre un critère de sélection dans un GROUP BY ?

En fait, j'ai une requête qui doit aller cherché dans une table, des interventions (de techniciens). Ces interventions ont toutes un numéro et ce numéro apparait plusieurs fois dans la table car a chaque fois que quelqu'un fait une action sur cette intervention il doit le stipuler donc cela génère une ligne supplémentaire avec le même numéro de l'intervention. Et en fait je veux faire une requête qui récupère toutes les interventions et en prenant le dernier état de l'intervention (c'est a dire la dernière chose qui a été faite sur l'intervention). Donc pour ça, j'ai une requête qui récupère toutes les intervention, avec un group by ça me sélectionne une fois chaque intervention mais le problème est que la requête ne me sélectionne pas la dernière ligne de chaque intervention (donc le dernier état), ce qui fait que quand une intervention est clôturée et bien avec la requête ça me renvoi pas forcément ce dernier état (ça me renvoi qu'elle est en court).
Je sais ça parait compliquer mais c'est assez complexe a expliquer.

Merci d'avance

13 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription   Statut Contributeur Dernière intervention   1 608
 
Il faudrait la requête pour comprendre un peu mieux.

D'ores et déjà, regarde du côté de la clause ORDER BY et LIMIT 1.

0
julien37
 
Est-ce que tu as les dates d'indiquer dans ta requête??? Car dans ces conditions alors il serez utile que tu tries en fonction des dates à partir de la date d'aujourdhui.

Ou sinon tu peux peut être (je n'ai pas essayé), groupé tes données en fonction de la dernière date, et ce pour chaque numéros.

Tiens moi au courant.
0
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
Oui j'ai essayé mais j'y arrive pas avec ORDER BY et LIMIT.
Donc la requete que j'ai essayé :

SELECT date, nom, etat FROM centre_appels, clients
WHERE clients.id_client = centre_appels.id_client
AND centre_appels.code_tech = 36184
AND centre_appels.date IN (SELECT MAX(date) FROM centre_appels GROUP BY id_tache)

Par exemple tu vois sur cette requete il me sort toutes les lignes de chaques intervention au lieu de me sortir seulement la dernière ligne de chaques invterventions. J'ai essayé de mettre le GROUP BY a la fin mais ça me renvoi seulement une seule ligne (la derniere ajoutée)
0
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
Oui j'ai des dates. En fait il faut que j'allie un group by pour qu'il me prenne une ligne par intervention et les date pour qu'il me prenne justement la dernière ligne de chaque intervention, la galère :s
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
A savoir que dans la requete que j'ai poster le chiffre "36184" ce n'est rien, c'est juste un code de technicien. Normalement c'est des sessions mais la pour l'exemple j'ai pris directement un code de technicien
0
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
Pas d'idée ??
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Petite question pour voir si j'ai bien compris ton problème, est-ce que la colonne ID_TACHE permet de distinguer les interventions, ou bien as-tu une autre colonne pour cela ?

A plus
0
Cisco_31 Messages postés 131 Date d'inscription   Statut Membre Dernière intervention   16
 
Et ça, ça fonctionne pas ?:

SELECT MAX(date), nom, etat FROM ...
0
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
Salut Christounet,

je suis pas sûr d'avoir bien compris ta question. Mais oui la colonne id_tache (=numero d'intervention), permet de retrouver une intervention.

SELECT MAX(date), nom, etat FROM ... < -- Non ça ne fonctionne pas car il faut en fait faire un select max mais pour le GROUP BY en gros
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Alors je pense que le code suivant devrait faire ce que tu veux
SELECT date, nom, etat, id_tache FROM centre_appels, clients
WHERE clients.id_client = centre_appels.id_client
AND centre_appels.code_tech = 36184
AND centre_appels.date = (SELECT MAX(date) FROM centre_appels c1 
where c1.id_tache = centre_appels.id_tache)

A plus
0
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Christounet ça marche. J'en pouvais plus de chercher. J'étais pas loin. Par contre j'aimerai comprendre ce que tu as fais. C'est quoi c1 ?
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

J'ai tout d'abord rajouté la colonne ID_TACHE dans ton ordre SELECT, et dans le deuxième SELECT , je ne sélectionne que les enregistrements ayant le même ID_TACHE. C1 est simplement un autre nom pour la table centre_appels afin de pouvoir testé l'égalité entre l'ID_TACHE du premier SELECT et celui du deuxième SELECT, cela pouvait être autre chose comme MATABLE, c'est comme un synonyme.
A plus et content de t'avoir aidé.
0
XeptoR Messages postés 58 Date d'inscription   Statut Membre Dernière intervention  
 
Ok ok merci bien

@+
0