Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 30/01/2011, 19h09   #1
Invité régulier
 
Inscription : juillet 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 32
Points : 8
Points : 8
Par défaut Sélectionner les 3 plus grandes valeurs liées à des items distincts

Bonjour à tous,

petit casse-tête pour moi...

je vous fais un topo rapide, j'ai une table "sessions" dans laquelle je note chaque jour les informations de la session du jour (en windsurf): flotteur utilisé, vitesse atteinte et autres...

je souhaite récupérer les 3 meilleurs vitesses atteintes pour faire un podium des 3 flotteurs les plus rapides

mais s'il se trouve qu'un même flotteur possède 2 ou 3 de ces 3 meilleures vitesses, je voudrais qu'il ne sorte que pour sa meilleure vitesse, et que les flotteurs suivants puissent sortir quand même

la requète actuelle: (vmax_2s est la vitesse)
Code :
SELECT vmax_2s FROM sessions  ORDER BY vmax_2s DESC LIMIT 0,3
évidemment si le flotteur A est enregistré avec les 3 meilleures vitesses, aucun autre flotteur ne sera sur le podium...

exemple en pratique ici: http://www.365sessions.fr/matos-6-Ex...Sport-2011.htm

ce flotteur récupère tous les trophées, ou presque, c'est normal il est performant, mais j'aimerais qu'il ne rafle qu'un trophée à la fois, s'il a l'or en vitesse, que l'argent aille au flotteur suivant

je pense que c'est assez clair

j'ai testé ces requètes sans grand résultat:
Code :
SELECT vmax_2s, board_id FROM sessions GROUP BY board_id ORDER BY vmax_2s DESC LIMIT 0,3
Code :
SELECT DISTINCT board_id, vmax_2s FROM sessions ORDER BY vmax_2s DESC LIMIT 0,3
pour un autre site avec une problèmatique similaire (classer des participants sur leur meilleure vitesse, avec plusieurs records enregistrés par participants), j'ai utilisé cette requète:
Code :
1
2
3
4
5
SELECT * FROM perfs P1
WHERE `perf_duration` = ( 
SELECT MIN(`perf_duration`) FROM `perfs` P2  
WHERE `perf_type`='$perf_type_id' AND P1.`perf_rider`=P2.`perf_rider`)
ORDER BY `perf_duration` ASC";
plus perf_duration est petit meilleur est le résultat, et perf_type correspond au type d'épreuve, il y en a plusieurs

je suis à la recherche d'idées pour faire ce qui me parait à la base pas très compliqué, sans repasser par une requète comme ma dernière (qui fait bien ce que je cherche)

pour l'instant j'utilise une requète de ce genre et le résultat est bon, mais il y a peut-être un moyen plus simple d'arriver à mon but

merci à qui pourra me donner un coup de pouce

Lomic
Lomic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 07h34   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Bonjour,
Tu peux tenter un truc du genre:
Code SQL :
1
2
3
4
5
 
SELECT board_id,max(vmax_2s)
FROM sessions
GROUP BY board_id
ORDER BY max(vmax_2s) DESC LIMIT 0,3
Par contre, j'ai un doute concernant la clause group by, je ne sais plus s'il faut le max() ou pas

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h51   #3
Invité régulier
 
Inscription : juillet 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 32
Points : 8
Points : 8
merci Tatayo, ça fait le boulot, impec et plus simplement qu'avec ma requète
Lomic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h25.


 
 
 
 
Partenaires

Hébergement Web