filtrage de n-uplet à partir d'un minimum - SQL/NoSQL - Programmation
Marsh Posté le 11-05-2006 à 12:24:14
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
Marsh Posté le 11-05-2006 à 16:13:19
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
Marsh Posté le 11-05-2006 à 16:51:32
moonboot a écrit : ca m'étonne que ca marche ta soluce... |
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 : |
malheureusement, je suis sur mysql.
Marsh Posté le 12-05-2006 à 16:52:19
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
Marsh Posté le 15-05-2006 à 09:30:23
Ah voilà ! ça, ça me semble très bien
Et c'est logique.
Merci bien moonboot
Marsh Posté le 11-05-2006 à 11:45:36
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