PostgreSQL - 提取数据不超过2天

时间:2017-05-16 07:08:49

标签: postgresql postgresql-9.4

我有一个PostgreSQL数据库,我在其中存储具有以下行的数据:

------------------------------------------------------
| id     | did  | sensorid | timestamp | sensor_data |  <-- Column names
------------------------------------------------------ 
| serial | text | int      | bigint    | jsonb       |  <-- Data types
------------------------------------------------------

我想为查询提取不超过2天的数据。我尝试过以下方法:

SELECT * FROM datastore 
WHERE did = '352204089091070' 
AND timestamp > ((NOW() AT TIME ZONE 'UTC') - 172800000);

数据库不包含索引(虽然我希望如此)但由于数据的大小和需要立即创建索引,这不是最好的主意。时间戳值以毫秒(大纪元时间)为单位,因此172800000等于两天。

问题是我已经浏览了整个数据库并从旧数据创建了元数据,现在我只想查看不超过2天的数据,而不是为每个查询运行整个数据库。

与我当前的查询相比,我预计会有一些性能提升,但是时间戳没有限制,但我只是SELECT MAX(timestamp)值:

SELECT id, did, timestamp, sensor_data FROM datastore
WHERE did = 352204089091070 
AND sensor_id = 910
AND timestamp = (SELECT MAX(timestamp) FROM datastore
                 WHERE did = 352204089091070
                 AND sensor_id = 910)
ORDER BY timestamp DESC
LIMIT 1;

我也尝试将时区投射到BIGINT,但这似乎也没有。

SELECT * FROM datastore 
WHERE did = '352204089091070' 
AND timestamp > ((NOW() AT TIME ZONE 'UTC')::BIGINT - 172800000);

可悲的是我只能使用PostgreSQL 9.4而我还没有考虑升级,因为我还不知道它对我的数据库有什么影响。

0 个答案:

没有答案