如何在postgres中获得group by的多个结果

时间:2010-09-23 22:38:38

标签: sql postgresql

我有一个包含一些数据的表格,如下所示:

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      |

我需要的是每种类型最近的5个,订单并不重要。

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      |

我猜一个子选择,分组或某种联合是有序的,但我只是不确定如何去获取它。

1 个答案:

答案 0 :(得分:2)

您可以使用Window功能。请参阅manual

示例:

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;