2010-09-23 5 views
1

J'ai une table avec des données qui ressemble à:Comment obtenir mutiple résultats du groupe par dans Postgres

 
id | type | timestamp | 
1 | 1 | 0001  | 
2 | 2 | 0002  | 
3 | 3 | 0003  | 
4 | 2 | 0004  | 
5 | 2 | 0005  | 
6 | 2 | 0006  | 
7 | 2 | 0007  | 
8 | 2 | 0008  | 
9 | 2 | 0009  | 
10 | 3 | 0010  | 

Ce que je besoin est le plus récent 5 pour chaque type, l'ordre n'a pas d'importance.

 
id | type | timestamp | 
1 | 1 | 0001  | 
5 | 2 | 0005  | 
6 | 2 | 0006  | 
7 | 2 | 0007  | 
8 | 2 | 0008  | 
9 | 2 | 0009  | 
3 | 3 | 0003  | 
10 | 3 | 0010  | 

Je devine un sous-select, groupe ou par une sorte d'union est pour mais je ne suis pas sûr de savoir comment s'y prendre pour l'obtenir.

+0

Quelle version de PostgreSQL? –

+0

J'utilise Postgres 8.4 – xordon

Répondre

2

Vous pouvez utiliser la fonction Fenêtre. Voir manual.

Exemple:

SELECT id, type, timestamp 
FROM 
    (SELECT id, type, timestamp, 
      rank() OVER (PARTITION BY type ORDER BY timestamp DESC) AS pos 
    FROM table 
) AS t 
WHERE pos < 5; 
+0

Merde fonctions de fenêtrage obtiennent toujours moi .. Merci! – xordon

Questions connexes