我有一个大表在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()。