Code SQL ?

Fermé
Donnlaur - 8 mai 2004 à 07:08
Fu Xuen Messages postés 3642 Date d'inscription jeudi 24 avril 2003 Statut Contributeur Dernière intervention 11 septembre 2005 - 10 mai 2004 à 19:52
Bonjour. Voici mon problème.
Dans une table SQL (Nom, prenom, temps1, temps2, temps3) je voudrais faire une selection du (nom, prenom, le meilleur des 3 temps) et trier cette liste temps du plus petit au plus grand.

Ex: Pierre dupont 12:00 12:05 12:07
Paul emile 12:25 12:36 11:59

Réponse :
Paul emile 11:59
Pierre dupont 12:00


Merci pour votre aide.
A voir également:

5 réponses

grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
8 mai 2004 à 10:28
Salut,

Si tu utilises Oracle, tu peux utiliser le DECODE et combiner avec des SIGN pour déterminer le plus gran des trois champs.
En MYSQL, tu peux utiliser la fonction GREATEST() pour faire des comparaisons entre tes champs.

Essaie et si ca marche pas, fais-moi signe !

michael.


Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
Bonjour et merci d'avoir répondu à mon annonce.
Malheureusement pour moi je n'arrive pas à trouver le code dont j'ai besoin et c'est pour cela que je reprends contact avec vous.
J'avais oublié de précisé avant que j'utilise Interbase6 et je ne vois pas ou je peux faire des comporaisons avec dans colonnes.
Voilà, si vous avez une solution je suis preneur.
Merci.
0
Fu Xuen Messages postés 3642 Date d'inscription jeudi 24 avril 2003 Statut Contributeur Dernière intervention 11 septembre 2005 305
8 mai 2004 à 12:10
Salut,

Plus généralement, c'est possible en SQL quelquesoit le SGBD. Il faut faire une sous-requête :
SELECT
  prenom,
  nom,
  (SELECT min(t.time) FROM table t WHERE t.prenom = prenom AND t.nom = nom) AS chrono
FROM
  table
ORDER BY
  chrono

-= Fu Xuen =-
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
8 mai 2004 à 20:56
Pas d'accord avec toi.

1. Tu ne prends pas le meilleur des trois temps qui se trouvent sur une ligne.
2. Une sous-requete telle que tu l'écris ne fonctionne pas avec tous les SGBD (notamment les versions 7 d'Oracle...)


Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
Fu Xuen Messages postés 3642 Date d'inscription jeudi 24 avril 2003 Statut Contributeur Dernière intervention 11 septembre 2005 305
9 mai 2004 à 01:47
C'est vrai, je suis complètement à côté de la plaque :). Je n'avais pas bien lu...

-= Fu Xuen =-
0
je pense plutot que tu devrais remplacer "min" par "max" si tu veux obtenir le meilleur temps.

SELECT
nom,
prenom,
(SELECT max(t.time) FROM table t WHERE t.prenom = prenom AND t.nom = nom) AS chrono
FROM
table
ORDER BY
chrono
0
Fu Xuen Messages postés 3642 Date d'inscription jeudi 24 avril 2003 Statut Contributeur Dernière intervention 11 septembre 2005 305
8 mai 2004 à 14:17
D'après les réponses attendues, il semblerait que ce soit le temps le plus court, non ?

-= Fu Xuen =-
0
fred > Fu Xuen Messages postés 3642 Date d'inscription jeudi 24 avril 2003 Statut Contributeur Dernière intervention 11 septembre 2005
8 mai 2004 à 14:52
peut etre que oui. mais je pense que c'est au concerné de trancher.

@+
0
Bonjour à tout le monde et merci déjà pour vos réponses.
Dans le code présenté par 'Fu Xuen' je n'ai pas une liste avec
le temps le plus petit par ligne mais le temps le plus petit sur
toute la base de donnée. Ce qui veut dire que j'ai toujours le même temps sur tous les champs. Moi ce que j'aimerais c'est avoir par ligne le temps le plus petit pour le record.
Une petite précision c'est que j'utilise pour l'instant InterBase6.

Merci Donnlaur.
0

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

Posez votre question
je dois dire qu'il y a un pb serieux de conception avec ta table. en effet SQL n'etant pas un language procedural il est pratiquement impossible de sortir le meilleur des trois temps de ta table si chaque temps est sur sa colonne grace à SQL seul. je te conseille de les (les temps) inserrer en ligne. au mieux regarder si Interbase n'offre pas les possibilités du procédural sur des données extraites dans une bd.

@+
0
Fu Xuen Messages postés 3642 Date d'inscription jeudi 24 avril 2003 Statut Contributeur Dernière intervention 11 septembre 2005 305
10 mai 2004 à 19:52
C'est vrai a priori et je m'y suis d'ailleurs fourvoyé. Mais je suppose qu'il s'agit ici d'un cas d'école ;).

-= Fu Xuen =-
0