SQL - max() et retour de ligne

SQL - max() et retour de ligne - SQL/NoSQL - Programmation

Marsh Posté le 30-11-2002 à 00:19:04    

Salut j'ai une colonne num_client où chaque client a un numero.
Je veux trouver le client qui a le plus grand numero et retourner ses autres attributs (par ex nom, prenom)
 
Avec max je trouve le num le plus grand mais impossible de retourner le reste de la ligne!
 
Si qqn peut m'aider
 
CHaiCA

Reply

Marsh Posté le 30-11-2002 à 00:19:04   

Reply

Marsh Posté le 30-11-2002 à 00:39:12    

elle ressemble a koi ta requete?


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 30-11-2002 à 00:41:08    

Faut ruser.
Au lieu de chercher le max de la colonne, trie la par ordre décroissant et ne garde que la première ligne :sol:


Message édité par mrbebert le 30-11-2002 à 00:41:21
Reply

Marsh Posté le 30-11-2002 à 00:46:39    

mrbebert a écrit a écrit :

Faut ruser.
Au lieu de chercher le max de la colonne, trie la par ordre décroissant et ne garde que la première ligne :sol:




 
:clapclap:


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 30-11-2002 à 00:48:40    

OUAH merci de répondre! VOila ma requete :
 
select num_users, nom_users, pws_users from users_site where num_users = (SELECT MAX(num_users) from users_site);
 
Pourquoi ca passerait pas?  
Si je pars dans une autre optique et que je trie en decroissant ,cOmment tu fais pour ne garder que la premiere ligne sous mysql?
 
CHaiCA

Reply

Marsh Posté le 30-11-2002 à 00:52:52    

peut etre supporte t il mal les requetes imbrikées, essai de passer par une variable tampon et de les dissociées.
 
concernant la recuperation juste de la premiere: si tu lis avec un while, vire le while et fait kune lecture a la premiere ligne du tableau.
 
cependant je te deconseille cette methode meme si elle parait seduisante de loin: meme si tu lis ke la premiere ligne, tu charges tout la tables en memoire, ce ki n'est pas forcement une bonne idée..
 
ressai ta methode en passant par une variable tampon


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 30-11-2002 à 00:56:42    

Leirn : ouais je vais essayer ca mais je suis un peu decu si mysql gere si mal les requetes imbriquees, m'enfin c'est gratuit, on peut pas tout avoir.
 
Toutefois pour recuperer la premiere ligne tu peux normalement faire ca dans la requete meme par exemple sous sqlserver, c'est top 1 apres avoir trier en decroissant.
 
Bon pour l'instant je vais essayer le tampon on verra bien
 
Mais si quelqu'un a une autre soluce je reste preneur!
 
CHaiCA

Reply

Marsh Posté le 30-11-2002 à 01:05:29    

chaica a écrit a écrit :

OUAH merci de répondre! VOila ma requete :
 
select num_users, nom_users, pws_users from users_site where num_users = (SELECT MAX(num_users) from users_site);
 
Pourquoi ca passerait pas?  
Si je pars dans une autre optique et que je trie en decroissant ,cOmment tu fais pour ne garder que la premiere ligne sous mysql?
 
CHaiCA  



Je ne crois pas que mysql gère les requêtes imbriquées [:proy]  
 
Pour garder la dernière ligne, tu rajoutes "LIMIT 0, 1" à ta requête (0 car tu prends la première ligne (numérotées à partir de 0), et 1 pour le nombre de lignes que tu veux récupérer).

Reply

Marsh Posté le 30-11-2002 à 01:12:43    

chaica a écrit a écrit :

Leirn : ouais je vais essayer ca mais je suis un peu decu si mysql gere si mal les requetes imbriquees, m'enfin c'est gratuit, on peut pas tout avoir.
 
Toutefois pour recuperer la premiere ligne tu peux normalement faire ca dans la requete meme par exemple sous sqlserver, c'est top 1 apres avoir trier en decroissant.
 
Bon pour l'instant je vais essayer le tampon on verra bien
 
Mais si quelqu'un a une autre soluce je reste preneur!
 
CHaiCA




 
effectivement si tu peux limiter le nombre de lignes renvoeyer a 1 (ce ki est posisble maintenant ke tu le dis, j'y avais pas penser tout a l'heure, le tri c ce kil y a de plus mieux
 
 
en revanche, c absolument normal kil gere pas les requetes imbrikés... contrairmeent a du c ou tu peut avoir kke cose de la forme
 
for (i=0; i<foncitonkirecuepereunchiffre(); i++)
 
le sql foncitnone sous forme de requete et non pas d'appel de fonction


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 30-11-2002 à 01:14:04    

Leirn : heu... oracle les gere parfaitement :D :D (tested and approved everyday)
 
CHaiCA

Reply

Marsh Posté le 30-11-2002 à 01:14:04   

Reply

Marsh Posté le 30-11-2002 à 01:16:22    

chaica a écrit a écrit :

Leirn : heu... oracle les gere parfaitement :D :D (tested and approved everyday)
 
CHaiCA




 
je ne sais pas comment fonctionne oracle :/ jamais essayé


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 06-12-2002 à 19:02:15    

mysql gere les subqueries uniquement a partir de la version 4.1 qui est en cours de developpement :)

Reply

Marsh Posté le 06-12-2002 à 19:06:02    

Ex :
 
 

mysql> SELECT titre,numeropost,date,auteur FROM forumconthardwarefr7 WHERE numeropost=(SELECT max(numeropost) FROM forumconthardwarefr7);
+---------------------------------------------+------------+---------------------+--------+
| titre                                       | numeropost | date                | auteur |
+---------------------------------------------+------------+---------------------+--------+
| C koi le matos de matthew bellamy (muse)??? |     185883 | 2002-12-06 19:05:07 | ppon   |
+---------------------------------------------+------------+---------------------+--------+
1 row in set (0.00 sec)


:D


Message édité par joce le 06-12-2002 à 19:06:47
Reply

Marsh Posté le 06-12-2002 à 19:08:05    

joce a écrit :

mysql gere les subqueries uniquement a partir de la version 4.1 qui est en cours de developpement :)


 
les subqueries c les requetes imbriqué?

Reply

Marsh Posté le 06-12-2002 à 19:08:32    

forummp3 a écrit :


 
les subqueries c les requetes imbriqué?

oui

Reply

Marsh Posté le 06-12-2002 à 19:09:20    

Reply

Marsh Posté le 06-12-2002 à 19:09:31    

Et t'as aussi les derived table :
 
SELECT * FROM (SELECT truc FROM pouet WHERE schmeu) WHERE gloups=hummf;

Reply

Marsh Posté le 06-12-2002 à 19:10:22    

et elle sort bientot la v 4.1 ? et pourkoi ils ont pas fait ca avant?

Reply

Marsh Posté le 06-12-2002 à 19:13:15    

forummp3 a écrit :

et elle sort bientot la v 4.1 ? et pourkoi ils ont pas fait ca avant?


parce que c'est pas trivial a faire :D

Reply

Marsh Posté le 06-12-2002 à 19:14:22    

joce a écrit :


parce que c'est pas trivial a faire :D


 
ha ok  [:sstarshoot]  
 
sinon on fait comment pour remplacer cela car ca a l'air tres utile :)

Reply

Marsh Posté le 06-12-2002 à 19:25:26    

jointure, requete fait en deux fois, etc

Reply

Marsh Posté le 06-12-2002 à 19:26:39    

joce a écrit :

jointure, requete fait en deux fois, etc


 
ok  :jap:

Reply

Marsh Posté le 27-05-2003 à 23:09:36    

joce a écrit :

Ex :

mysql> SELECT titre,numeropost,date,auteur FROM forumconthardwarefr7 WHERE numeropost=(SELECT max(numeropost) FROM forumconthardwarefr7);
+---------------------------------------------+------------+---------------------+--------+
| titre                                       | numeropost | date                | auteur |
+---------------------------------------------+------------+---------------------+--------+
| C koi le matos de matthew bellamy (muse)??? |     185883 | 2002-12-06 19:05:07 | ppon   |
+---------------------------------------------+------------+---------------------+--------+
1 row in set (0.00 sec)




Elle n'est pas conçue bizarrement ta DB ? :??:
 
Le stockage du pseudo de l'auteur en lieu et place de son ID n'est pas commum. Ca fait perdre de la place et c'est peut être pas le mieux niveau relationnel si ? [:core 666] Tu es vraiment gagnant avec la jointure que ca te fait économiser ?
 
Autre point curieux : on dirait que tu créés une table par forum (table forumconthardwarefr7 pour le forum Blabla - Divers qui porte le n°7). Tu as constaté un gain de performance significatif en procédant ainsi plutôt qu'en créant une table commune avec un champ indexé forum_id ? Ca semble assez déroutant comme organisation :)

Reply

Marsh Posté le 27-05-2003 à 23:21:35    


il supporte les jointures entre la requête principale et la requête imbriquée ?
 
Par exemple, pour récupérer le dernier post de chaque membre :

Code :
  1. select t1.titre, user.login
  2. from topic t1, user
  3. where user.id = topic.user_id
  4. and t1.date = (select max(t2.date) from topic t2 where t2.user_id = t1.user_id)


Si oui, alors mySQL va peut-être enfin devenir intéressant...

Reply

Marsh Posté le 27-05-2003 à 23:23:23    

Core 666 a écrit :


Elle n'est pas conçue bizarrement ta DB ? :??:
 
Le stockage du pseudo de l'auteur en lieu et place de son ID n'est pas commum.


Il utilise le login comme clé.
C'est pas plus lent, ça bouffe pas beaucoup plus de place, et ça évite de faire des jointures sans arrêt pour retrouver le pseudo de l'auteur.

Reply

Marsh Posté le 27-05-2003 à 23:30:44    

Et, dernière question, supporte-t-il les requêtes dans le select ?
 

Code :
  1. select (select count(*) from topics) as nbTopics, (select count(*) from users) as nbUsers from dual

Reply

Marsh Posté le 28-05-2003 à 21:42:15    

C'est qu'il répondrait pas ce Joce :o ;)

Reply

Marsh Posté le 29-05-2003 à 01:59:11    

réponse : oui
D'ailleurs t'es pas obligé de rajouter FROM DUAL


Message édité par joce le 29-05-2003 à 02:00:53
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed