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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete min sur une liste

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete min sur une liste

n°1492539
gregouf
Abubu Grigoufi Al-Hibi
Posté le 18-12-2006 à 09:38:49  profilanswer
 

Bonjour à tous,  
 
Je pense que ma question est assez triviale mais je ne connais pas particulierement SQL (j'utilise Access), donc je viens la soumettre ici:
 
J'ai une table de la forme ID(Cle primaire)/A/B/C/D/E
Je souhaite à partir d'une requete obtenir pour une valeur de E donnée, la suivante dans la table, c'est à dire l'ID de la valeur suivante ayant pour valeur E.
 
J'ai essayé un truc comme ca :
 
SELECT Table.ID, Val(Table!D) AS D1, Table.E, Table_1.ID, Table_1.E
FROM Table, Table AS Table_1
GROUP BY Table.ID, Val(Table!D), Table.MID, Table_1.ID, Table_1.E
HAVING (((Table_1.ID)>[Table]![ID]) AND ((Table_1.E)=[Table]![E]))
ORDER BY Table.ID;
 
La requete n'est pas bonne car (Table_1.ID)>[Table]![ID]) me renvoie l'ensemble des élements qui ont une ID plus grande alors que je voudrais seulement le suivant. J'ai essaye un Min() mais ca ne marche pas.
 
Merci d'avance,
Greg.
 
:hello:

mood
Publicité
Posté le 18-12-2006 à 09:38:49  profilanswer
 

n°1492571
MagicBuzz
Posté le 18-12-2006 à 10:56:19  profilanswer
 

Citation :

Je souhaite à partir d'une requete obtenir pour une valeur de E donnée, la suivante dans la table, c'est à dire l'ID de la valeur suivante ayant pour valeur E.


 
Cette phrase ne veut rien dire.
Tu veux quoi au juste ?
Exemples.
 
Parceque là en fait, c'est illogique comme question ;)

n°1492598
hatama2
Posté le 18-12-2006 à 11:47:50  profilanswer
 

Gregouf > Ca signifie qu'à l'instance ID X j'ai une valeur Y dans le champ E.   Je veux que ma requete renvoie la valeur X' correspondant à la prochaine iteration de la valeur Y dans le champ E.  
C'est plus clair ??

n°1492614
MagicBuzz
Posté le 18-12-2006 à 12:14:29  profilanswer
 

J'imagine que c'est ça, mais je voudrais être sûr ;)
 
En tout cas, ça va se solder par une sous-requete avec un MIN()

n°1492725
gregouf
Abubu Grigoufi Al-Hibi
Posté le 18-12-2006 à 15:07:28  profilanswer
 

Oui je suppose :D. Le truc c'est que la table de départ fait 2500000, donc faut reduire ça de maniere intelligente (donc pas ce que j'ai fait pour l'instant :D). Car si je lui demande de generer dans une premiere table seulement la partie (((Table_1.ID)>[Table]![ID]) AND ((Table_1.E)=[Table]![E])) le bougre à du mal, faut dire que je fais le traitement sur un portable et je n'ai que ca sous la main.
 
Donc l'idée de base que tu proposes c'est de faire la requete que j'ai indiqué en 1. puis passer par un Min direct en 2.
avec un truc du style ID1 et Min(ID2) ??
 
Merci
:hello:

n°1492770
MagicBuzz
Posté le 18-12-2006 à 15:39:39  profilanswer
 

bon, alors :
 
ID et valeur de E pour l'ID=25 :
 


select t1.id, t1.e
from table t1
where t1.id = 25


 
Maintenant, liste de tous les ID suppérieurs où E est égale à la même valeur que celui de l'ID=25 :
 


select t1.id old_id, t1.e old_e, t2.new_id, t2.new_e
from table t1 inner join table t2 on t2.e = t1.id and t2.id > t1.id
where t1.id = 25


 
Maintenant, je veux parmis les ID supérieurs, le plus petit :
 


select t1.id old_id, t1.e old_e, t2.new_id, t2.new_e
from table t1 inner join table t2 on t2.e = t1.id and t2.id > t1.id
where t2.id =
(
  select min(t3.id)
  from table t3
  where t3.id > t1.id
  and t3.e = t1.e
)
and t1.id = 25


 
Suppression des filtres inutiles sur t2, puisqu'on filtre déjà avec t3 sur sa clé primaire id (on peut donc pas faire mieux) :
 


select t1.id old_id, t1.e old_e, t2.new_id, t2.new_e
from table t1 inner join table t2
where t2.id =
(
  select min(t3.id)
  from table t3
  where t3.id > t1.id
  and t3.e = t1.e
)
and t1.id = 25


 
Et voilà :)


Message édité par MagicBuzz le 18-12-2006 à 15:45:58
n°1493076
gregouf
Abubu Grigoufi Al-Hibi
Posté le 19-12-2006 à 06:24:56  profilanswer
 

Merci pour ta reponse complete, j'ai compris la connerie que j'avais faite et maintenant ca marche.
:hello:


Message édité par gregouf le 19-12-2006 à 07:00:15

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

  Requete min sur une liste

 

Sujets relatifs
[Oracle ASM] Problème d'optimisation de requête suite à migrationUne liste déroulante peuplée par une requête SQL (Javascript)
Resultat d'une requete parametre dans zone de liste !!liste déroulante chargée par requête sql et sélection dans cette liste
requête paramétrée et liste déroulanteListe de A=>Z ou Z=>A sur une requete Mysql ?
requete renvoy liste de tous les numeros de 1 a la semaine de SYSDATE[access] Liste déroulante et requête [Résolu]
[SQL] Requête pour obtenir la liste des tables [résolu]liste deroulant qui fait une requete
Plus de sujets relatifs à : Requete min sur une liste


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