在postgres中每分钟选择一条记录



我有一个大表在postgres数据库与单位的位置。现在我需要每60秒检索一个位置。

在Mysql中,这是一块蛋糕:select * from location_table where unit_id = '123' GROUP BY round(timestamp / 60)

但是在postgres中,这似乎是一个非常困难的问题。我也有日期格式的时间戳,而不是epoch格式的。

下面是一个表的样子的例子

CREATE TABLE location_table (
unit_id int,
"timestamp" timestamp(3) without time zone NOT NULL,
lat double precision,
lng double precision
);

使用date_trunc()设置每分钟的集合数:

SELECT  * -- most likely not what you want
FROM    location_table 
WHERE   unit_id = 123 -- numbers don't need quotes ' 
GROUP BY date_trunc('minute', 'timestamp');

这个*当然是错的,但是我不知道你想知道关于GROUP的什么,所以我想不出更好的。

编辑:当您需要从表中获得随机结果时,DISTINCT ON()可以完成这项工作:

SELECT  DISTINCT ON(date_trunc('minute', timestamp))
* -- your columns
FROM    location_table;

还有其他(标准SQL)解决方案,如使用row_number()。

最新更新