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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  filtrage de n-uplet à partir d'un minimum

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

filtrage de n-uplet à partir d'un minimum

n°1364099
smaragdus
whores, drugs & J.S. Bach
Posté le 11-05-2006 à 11:45:36  profilanswer
 

Salut, j'ai un problème de requete :
 
J'ai une table (issue d'une autojointure pour info) de la forme :
a(i) , b(i,k) , date(i,k)
 
exemple :
a1 , b11 , date11
a1 , b12 , date12
a1 , b13 , date13
...
a2 , b21 , date21
a2 , b22 , date22
a2 , b23 , date23
...
 
je voudrais des couples (a , b), groupés par a, avec le b dont la date associée est la plus petite pour un a donné
exemple :
a1, b12, date12 (où date12 est le min de (date11, date12, date13))
a2, b21, date21 (où date21 est le min de (date21, date22, date23))
etc...
 
donc je suis parti connement sur un "select a,b,min(date) from matable group by a" mais là il faut que la
clé b soit celle dont la date est la plus petite.  
 
On peut faire aussi un select a,b,min(date) from matable order by a,date group by a : ça marche ? mais ça me semble foireux.
Quelle est la bonne approche professionnelle ?
 
Merci par avance

mood
Publicité
Posté le 11-05-2006 à 11:45:36  profilanswer
 

n°1364138
smaragdus
whores, drugs & J.S. Bach
Posté le 11-05-2006 à 12:24:14  profilanswer
 

Bon je tiens UNE soluce :  
 
select t1.a,t1.b,t1.temps
from (
       select a , b, temps from atest
       order by a asc, temps asc
) t1
group by a
 
mais je suis sûr qu'on peut éviter la sous-requete

n°1364367
moonboot
Posté le 11-05-2006 à 16:13:19  profilanswer
 

ca m'étonne que ca marche ta soluce...
t'es sûr que t'as pas une erreur de type b et temps ne font pas partie du group by ???
 
Si tu es sur Oracle, les fonctions analytiques marchent très bien pour ces cas :
 
select a, b, date from
(select a, b, date, min(date) over (partition by a, b) min_date
  from table)
where date = min_date

n°1364435
smaragdus
whores, drugs & J.S. Bach
Posté le 11-05-2006 à 16:51:32  profilanswer
 

moonboot a écrit :

ca m'étonne que ca marche ta soluce...
t'es sûr que t'as pas une erreur de type b et temps ne font pas partie du group by ???


 
ouais, je sais c'est bizarre. En fait, ça marche parce que le group by prend la 1ere ligne du groupe et que c'est ordonné par date. C'est clair que c'est foireux.
 

Citation :


Si tu es sur Oracle, les fonctions analytiques marchent très bien pour ces cas :


 
malheureusement, je suis sur mysql.

n°1365326
moonboot
Posté le 12-05-2006 à 16:52:19  profilanswer
 

je t'ai dis des betises sous oracle c'est :
 
select a, b, date from
(select a, b, date, min(date) over (partition by a) min_date
  from table)
where date = min_date
 
sous mysql ceci devrait marcher :
 
select table.a, table.b, table.date
from
(select a, min(date) min_date
from table
group by a) toto,
table
where table.a = toto.a and table.date = toto.min_date

n°1366182
smaragdus
whores, drugs & J.S. Bach
Posté le 15-05-2006 à 09:30:23  profilanswer
 

Ah voilà ! ça, ça me semble très bien :jap:
Et c'est logique.
 
Merci bien moonboot :jap:


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

  filtrage de n-uplet à partir d'un minimum

 

Sujets relatifs
[VBA ACCESS] Créer une table à partir des noms de fichiersGenerer une base a partir d'un script
Ouvrir une URL à partir du serveur web (apache) !Appeler une DLL C++/MFC à partir d'un code C#
Se connecter à partir de plusieurs pcs sur une BD accessLister les fichiers d'un répertoire à partir d'un smbclient
javascript: tableau à partir d'un string[port serie] reception de donnees a partir d'un fichier ?
créer un page html à partir de visual basic[Résolu] Créer un objet à partir du nom de son type
Plus de sujets relatifs à : filtrage de n-uplet à partir d'un minimum


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