Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1071 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Requête SQL - doublons oui mais ..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Requête SQL - doublons oui mais ..

n°1313365
debh
Posté le 25-02-2006 à 00:28:35  profilanswer
 

Voila, imaginons une table formé comme ceci
ID | TYPE | VALEUR
1  | X   | 1
2  | Y   | 2
3  | X   | 3
4  | Y   | 4
5  | X   | 5
6  | Y   | 6
 
Je voudrais formuler une requête qui correspondrait à:
"Récupérer les 2 dernières valeurs de chaque type"
 
En gros, un 'SELECT DISTINCT type' couplé à un 'SELECT [...] WHERE type=type LIMIT 0,2'
Je sais que GROUP BY permet de recuperer les doublons, ça se rapproche de ce que je veux mais c'est pas ça
 
Pour l'instant, je recupère les types par un SELECT DISTINCT et je fais un SELECT [...] LIMIT 0,2 par derrière, mais sur 83000 enregistrements et 25 types, cela prend ennormément de temps (+ de 1 minute)
 
Si vous avez une idée .. merci d'avance :)


Message édité par debh le 25-02-2006 à 22:00:42
mood
Publicité
Posté le 25-02-2006 à 00:28:35  profilanswer
 

n°1313626
Beegee
Posté le 25-02-2006 à 20:47:39  profilanswer
 

Tu peux faire des sous-requêtes ?
 
En gros il te faut les 2 valeurs les plus grandes de chaque type ?
 

Code :
  1. SELECT mt1.type, MAX(mt1.valeur), MAX(mt2.max_valeur)
  2. FROM maTable mt1,
  3.      (SELECT type, MAX(valeur) AS max_valeur
  4.      FROM maTable
  5.      GROUP BY type) mt2
  6. WHERE mt1.type = mt2.type
  7. AND mt1.valeur < mt2.max_valeur
  8. GROUP BY mt1.type;

n°1313633
debh
Posté le 25-02-2006 à 21:03:01  profilanswer
 

Cette requête n'a pas l'air de marcher, et j'avoue que sa logique me depasse un peu :P
La problematique que je pose, a l'air de poser problème !
Est-t'il possible de faire ce que je demande en une seule requête ?
Si les gens qui passeront par ici veulent bien nous éclairer de leur connaissance :)
 
 
Je donne pour tester ma table complété
 

Code :
  1. CREATE TABLE `matable` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `type` varchar(1) NOT NULL,
  4.   `valeur` int(11) NOT NULL,
  5.   PRIMARY KEY  (`id`)
  6. );
  7. INSERT INTO `matable` VALUES (1, 'X', 1);
  8. INSERT INTO `matable` VALUES (2, 'Y', 2);
  9. INSERT INTO `matable` VALUES (3, 'X', 3);
  10. INSERT INTO `matable` VALUES (4, 'Y', 4);
  11. INSERT INTO `matable` VALUES (5, 'X', 5);
  12. INSERT INTO `matable` VALUES (6, 'Y', 6);
  13. INSERT INTO `matable` VALUES (7, 'X', 7);
  14. INSERT INTO `matable` VALUES (8, 'Y', 8);


 
Merci de ta réponse !

n°1313640
Beegee
Posté le 25-02-2006 à 21:55:42  profilanswer
 

Tu utilises mySql ? Quelle version ?
 
Je pense que ma requête marche, sauf sur les anciennes versions de mySql qui n'acceptent pas les sous-requêtes.

n°1313642
debh
Posté le 25-02-2006 à 22:00:17  profilanswer
 

En effet, autant pour moi, j'avais mal copier/collé !

n°1313649
Beegee
Posté le 25-02-2006 à 22:24:45  profilanswer
 

Résultat, ça marche ou pas ? :)

n°1313650
debh
Posté le 25-02-2006 à 22:25:31  profilanswer
 

Cela marche, maintenant je cherche à faire la même chose avec les 5 derniers resultats
tu as peut être une idée ? :p


Message édité par debh le 25-02-2006 à 22:25:47
n°1313689
Beegee
Posté le 26-02-2006 à 00:28:36  profilanswer
 

on verra ça demain, bonne nuit :D

n°1313690
debh
Posté le 26-02-2006 à 00:31:08  profilanswer
 

bonne nuit :)

n°1313702
Beegee
Posté le 26-02-2006 à 09:39:59  profilanswer
 

S'il n'y a que 25 types différents, alors il vaut mieux repartir sur ta solution initiale si tu veux les 5 plus grandes valeurs par type.
 
Mets un index sur type si ce n'est pas déjà fait, et ça devrait pas prendre plus de quelques secondes ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Requête SQL - doublons oui mais ..

 

Sujets relatifs
[Résolu ?] Insertion d'un player dans une page php[RESOLU] Numéro du jour de la semaine
[VBScript] [RESOLU] fonction SPLIT[JSP] [résolu] cookie, plusieurs valeurs ?
[RESOLU]pb d'affichage dans IE avec diaporama en swf[resolu]comment ecrire dans un fichier,
[Résolu] MsSql : WHERE 1 ???[résolu] limitation de droits
[SGBD] Voilà pourquoi je n'aime pas la syntaxe SQL 92[VBScript] [RESOLU] inputbox
Plus de sujets relatifs à : [Résolu] Requête SQL - doublons oui mais ..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR