Rechercher : dans
Par :

SQL selectionner selon un maximum

Dernière réponse le 29 avr 2009 à 12:18:07 batoune, le 29 avr 2009 à 11:39:54 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « SQL selectionner selon un maximum » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Gestion des paramètres SQL VoirSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR
Télécharger MS SQL Migrate VoirPour des raisons pratique ou quasiment professionnel, il est nécessaire de convertir des bases de données entre différents formats. Le principal, c’est qu’il n’y ait aucune perte de donnée lors de la conversion. MS SQL Migrate est...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...
SQL - Restriction VoirExpression des restrictions Une restriction consiste à sélectionner les lignes satisfaisant à une condition logique effectuée sur leurs attributs. En SQL, les restrictions s'expriment à l'aide de la clause WHERE suivie d'une condition logique...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...

1

chossette9, le 29 avr 2009 à 11:44:16

SELECT nom,lieu,MAX(numero)
FROM ta_table
GROUP BY nom,lieu;

Normalement ceci devrait fonctionner.

Répondre à chossette9

2

batoune, le 29 avr 2009 à 11:53:08

Ben j'ai deja essayer mais sa me fait une erreur, comme requete j'ai :

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.

Répondre à batoune

3

 batoune, le 29 avr 2009 à 12:18:07

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!!

Répondre à batoune
Collection CommentÇaMarche.net