如何为所有用户选择最新行?

时间:2014-08-04 01:31:13

标签: sql postgresql greatest-n-per-group

我有一张类似于以下内容的表格:

=> \d table
                                      Table "public.table"
   Column    |            Type             |            Modifiers
-------------+-----------------------------+-------------------------------
 id          | integer                     | not null default nextval( ...
 user        | bigint                      | not null
 timestamp   | timestamp without time zone | not null
 field1      | double precision            |

如您所见,它为所有用户随时间推移包含许多field1个值。有没有办法在一个查询中有效地获取所有用户的最新field1值(即每个用户一行)?我想我可能必须使用group byselect first的某种组合。

1 个答案:

答案 0 :(得分:0)

在Postgres中使用DISTINCT ON最简单:

SELECT DISTINCT ON (id)
       id, timestamp, field1
FROM   tbl
ORDER  BY id, timestamp DESC;

更多详情:

除此之外:不要使用timestamp作为列名。它是SQL中的reserved word和Postgres中的基本类型名称。