我有一张类似于以下内容的表格:
=> \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 by
和select first
的某种组合。
答案 0 :(得分:0)
在Postgres中使用DISTINCT ON
最简单:
SELECT DISTINCT ON (id)
id, timestamp, field1
FROM tbl
ORDER BY id, timestamp DESC;
更多详情:
除此之外:不要使用timestamp
作为列名。它是SQL中的reserved word和Postgres中的基本类型名称。