Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2007, 15h40   #1
Membre à l'essai
 
Inscription : avril 2005
Messages : 200
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 200
Points : 24
Points : 24
Par défaut Filtre requete SQL

Slt à tous,

j'ai une question de débutant :
j'ai 3 lignes quasi-identique dans une table.
Seul une colonne "VALEUR" diffère (de type NUMBER).

J'aimerai récupérer la ligne dont la "VALEUR" est la + grande (autrement que par WHERE VALEUR=(SELECT MAX(VALEUR) FROM table)).
Une idée?
Merci d'avance.
zizou771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 16h18   #2
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Plusieurs solutions existent

Code :
1
2
3
4
5
6
7
8
9
 
SELECT *
FROM
(
  SELECT *
  FROM t
  ORDER BY valeur DESC
)
WHERE rownum = 1
Cette solution n'est pas équivalente à ta requête dans le cas général. Mais si tu es sur qu'une seule ligne correspond à la valeur maximale alors elle est bonne.

une autre solution plus générale consiste à utiliser les fonctions analytiques
Code :
1
2
3
4
5
6
7
8
9
 
SELECT *
FROM
(
  SELECT t.*, dense_rank() over (ORDER BY valeur DESC) rnk
  FROM t
  ORDER BY valeur DESC
)
WHERE rnk = 1
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h46.


 
 
 
 
Partenaires

Hébergement Web