PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/10/2014 19:37:13

sansli
Membre

Obtenir les derniers enregistrements pour une liste d'identifiants

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

#2 29/10/2014 21:48:46

rjuju
Administrateur

Re : Obtenir les derniers enregistrements pour une liste d'identifiants

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

Hors ligne

#3 31/10/2014 16:02:57

sansli
Membre

Re : Obtenir les derniers enregistrements pour une liste d'identifiants

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

Pied de page des forums