分组并显示每个结果最后一行的内容

stU*_*Urb 4 postgresql group-by postgresql-9.1 greatest-n-per-group

我有两个对象的一些数据,我想检索两个对象的最后一行,最好是在一个查询中。

表结构:

CREATE TABLE data
(
  pid serial NOT NULL,
  dt timestamp without time zone,
  object_id integer,
  info_1 numeric(10,8),
  speed numeric,
  CONSTRAINT dat_pid PRIMARY KEY (pid)
)
Run Code Online (Sandbox Code Playgroud)

样本数据:

1, 2014-04-29 12:02:56, 8, ....
2, 2014-04-29 12:02:10, 8, ....
3, 2014-04-29 12:01:02, 8, ....
5, 2014-04-29 12:01:32, 6, ....
.....
Run Code Online (Sandbox Code Playgroud)

我想要每个唯一的对象 ID 一行,每一行都是可用的最新行。我试图通过使用此查询来实现它,但它希望 pid 位于 group by 子句中。但我不想按 PID 分组,而是按跟踪器 ID 分组....

SELECT * 
FROM data
GROUP BY object_id
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 9

您可以DISTINCT ON用于此类查询:

SELECT DISTINCT ON (object_id) *
FROM data
ORDER BY object_id, dt DESC ;
Run Code Online (Sandbox Code Playgroud)