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 -
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
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
A voir également:
- Requete SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
13 réponses
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.
D'ores et déjà, regarde du côté de la clause ORDER BY et LIMIT 1.
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.
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.
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)
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)
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
Bonjour,
Alors je pense que le code suivant devrait faire ce que tu veux
A plus
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
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 ?
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é.
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é.