Vous n'êtes pas identifié(e).
Bonjour,
Voici mon problème, j'ai une table A avec les champs:
champ1 => id technique
champ2 => un identifiant
champ3 => date de dernière mise à jour
champ4....etc
Je cherche à récupérer la liste des dernières mise à jour groupé par identifiant(champ2) pour une liste d'identifiant.
Je pense que je dois utiliser GROUP BY, mais je n'ai pas réussit pour l'instant.
exemple:
liste d'identifiant = (257, 258)
champ1 champ2 champ3
1 257 "2013-04-12 10:28:13.234"
2 257 "2013-04-11 17:24:49.941"
3 258 "2013-03-29 12:08:27.70"
4 258 "2013-04-12 10:28:12.667"
5 259 "2013-06-12 14:32:41.522"
résultat attendu:
champ1 champ2 champ3
1 257 "2013-04-12 10:28:13.234"
4 258 "2013-04-12 10:28:12.667"
Je suis sur PostgreSQL 8.3.8-1.
Merci.
Hors ligne
Sans la définition complète de votre table, difficile de donner la meilleure solution. En imaginant qu'elle s'appelle matable, et que les champs s'appellent respectivement id,id2 et dt, la requête suivante devrait fonctionner :
select r.* from
(select id2,max(dt) as max
from matable
group by id2
) s
join matable r on s.max = r.dt
Julien.
https://rjuju.github.io/
Hors ligne
Merci de votre réponse.
Voici la definition de ma table:
CREATE TABLE matable
(
id1 bigint NOT NULL,
date timestamp without time zone NOT NULL,
id2 integer NOT NULL,
...
)
J'arrive à obtenir le résultat avec cette requête:
select b.* from matable b,
(select a.id2, max(a.date)
from matable a
group by a.id2
order by a.id2
) a
where a.id2= b.id2
and b.date = a.max
Hors ligne