SQL selectionner selon un maximum
Résolu
batoune
Messages postés
538
Date d'inscription
Statut
Membre
Dernière intervention
-
batoune Messages postés 538 Date d'inscription Statut Membre Dernière intervention -
batoune Messages postés 538 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aurais besoin d'aide pour réaliser une requete SQL,
Je dispose d'une table dans laquel je souhaiterais récuperer les champs suivant :
nom
lieux
numero
Jusque la rien de bien compliqué, mon probleme viens du fait que je ne veux récuperer que les tuples dont les numero sont les plus elevé pour chaque couple nom/lieux. Par exemple si j'ai
nom = pierre, lieu = maison, numero = 5 ==>ligne 1
nom = pierre, lieu = maison, numero = 7 ==>ligne 2
nom = pierre, lieu = travail, numero = 4 ==>ligne 3
nom = pierre, lieu = travail, numero = 6 ==>ligne 4
Je ne voudrais récuperer que les lignes 2 et 4 sans etre obligé de rentrer en dure dans la commande SQL :
WHERE numero = 7 OR numero = 6 car de nouveaux tuples avec de nouveaux numero arrivent régulierement dans la table.
Je ne sais pas si s'est possible a faire avec une requete du genre SELECT MAX numero ..... ou quelque chose comme sa.
Merci d'avance pour vos reponses
J'aurais besoin d'aide pour réaliser une requete SQL,
Je dispose d'une table dans laquel je souhaiterais récuperer les champs suivant :
nom
lieux
numero
Jusque la rien de bien compliqué, mon probleme viens du fait que je ne veux récuperer que les tuples dont les numero sont les plus elevé pour chaque couple nom/lieux. Par exemple si j'ai
nom = pierre, lieu = maison, numero = 5 ==>ligne 1
nom = pierre, lieu = maison, numero = 7 ==>ligne 2
nom = pierre, lieu = travail, numero = 4 ==>ligne 3
nom = pierre, lieu = travail, numero = 6 ==>ligne 4
Je ne voudrais récuperer que les lignes 2 et 4 sans etre obligé de rentrer en dure dans la commande SQL :
WHERE numero = 7 OR numero = 6 car de nouveaux tuples avec de nouveaux numero arrivent régulierement dans la table.
Je ne sais pas si s'est possible a faire avec une requete du genre SELECT MAX numero ..... ou quelque chose comme sa.
Merci d'avance pour vos reponses
A voir également:
- SQL selectionner selon un maximum
- Comment sélectionner un message sur whatsapp pour y répondre - Guide
- Selectionner texte sur pdf - Guide
- Logiciel sql - Télécharger - Bases de données
- Comment selectionner toutes les photos dans google photo - Guide
- Sql (+) - Forum Programmation
2 réponses
Je progresse, en fesant :
SELECT nom, lieu, MAX(numero)
FROM matable
WHERE CAST(FLOOR(CAST(laDate AS FLOAT)) AS DATETIME) = '20090428'
GROUP BY nom, lieu
ORDER BY lieu, nom
Sa me renvoi un résultat, mais maintenant si je rajoute un autre champ dans le select
SELECT nom, lieu, etat, MAX(numero)
FROM matable
WHERE CAST(FLOOR(CAST(laDate AS FLOAT)) AS DATETIME) = '20090428'
GROUP BY nom, lieu
ORDER BY lieu, nom
Sa me dit que etat n'est pas valide car pas dans la clause GROUP BY mais si je le rajoute dedans sa me renvois le numero max pour les couple(nom/lieu/etat) mais moi je les veux juste pour les couples (nom/lieu) avec l'indication des etats pour chaque couple mais sans que etat entre dans la comparaison pour les numero max
par exemple si j'ai 2couple
nom = pierre, lieu=maison, etat=OK, numero = 6
nom = pierre, lieu=maison, etat=KO, numero = 7
je ne veux que le deuxieme, or avec etat dans la clause group by il me renvoi les 2!!
SELECT nom, lieu, MAX(numero)
FROM matable
WHERE CAST(FLOOR(CAST(laDate AS FLOAT)) AS DATETIME) = '20090428'
GROUP BY nom, lieu
ORDER BY lieu, nom
Sa me renvoi un résultat, mais maintenant si je rajoute un autre champ dans le select
SELECT nom, lieu, etat, MAX(numero)
FROM matable
WHERE CAST(FLOOR(CAST(laDate AS FLOAT)) AS DATETIME) = '20090428'
GROUP BY nom, lieu
ORDER BY lieu, nom
Sa me dit que etat n'est pas valide car pas dans la clause GROUP BY mais si je le rajoute dedans sa me renvois le numero max pour les couple(nom/lieu/etat) mais moi je les veux juste pour les couples (nom/lieu) avec l'indication des etats pour chaque couple mais sans que etat entre dans la comparaison pour les numero max
par exemple si j'ai 2couple
nom = pierre, lieu=maison, etat=OK, numero = 6
nom = pierre, lieu=maison, etat=KO, numero = 7
je ne veux que le deuxieme, or avec etat dans la clause group by il me renvoi les 2!!
SELECT nom, lieu, MAX(numero)
FROM matable
WHERE CAST(FLOOR(CAST(laDate AS FLOAT)) AS DATETIME) = '20090428'
ORDER BY lieu, nom, numero
et j'ai une erreur qui me dit :
La colonne 'matable.nom' est incorrecte dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation et qu'il n'y a pas de clause GROUP BY.
La colonne 'matable.lieu' est incorrecte dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation et qu'il n'y a pas de clause GROUP BY.
La colonne 'matable.numero' n'est pas valide dans la clause ORDER BY parce qu'elle n'est pas contenue dans une fonction d'agrégation et qu'il n'y a aucune clause GROUP BY.