代码之家  ›  专栏  ›  技术社区  ›  xordon

如何在Postgres中从group by中得到多个结果

  •  1
  • xordon  · 技术社区  · 16 年前

    我有一个表,其中包含如下数据:

    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 回复  |  直到 16 年前
        1
  •  2
  •   jira    16 年前

    您可以使用窗口功能。见 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;