我将测量数据存储到以下结构中:
CREATE TABLE measurements(
measured_at TIMESTAMPTZ,
val INTEGER
);
Run Code Online (Sandbox Code Playgroud)
我已经知道使用了
(一个) date_trunc('hour',measured_at)
和
(b)中 generate_series
我可以通过以下方式汇总我的数据:
microseconds,
milliseconds
.
.
.
Run Code Online (Sandbox Code Playgroud)
但是有可能将数据聚合5分钟,或者说是任意秒数吗?是否可以将测量数据聚合为任意秒数?
我需要通过不同时间分辨率聚合的数据将它们馈送到FFT或AR模型中,以便查看可能的季节性.
我需要查询每分钟直到该分钟的总行数.
到目前为止我能达到的最好成绩并没有成功.它返回每分钟的计数,而不是每分钟的总计数:
SELECT COUNT(id) AS count
, EXTRACT(hour from "when") AS hour
, EXTRACT(minute from "when") AS minute
FROM mytable
GROUP BY hour, minute
Run Code Online (Sandbox Code Playgroud) sql postgresql datetime aggregate-functions window-functions
我有不均匀分布的数据(wrt日期)几年(2003-2008).我想查询一组给定的开始和结束日期的数据,按PostgreSQL 8.3中任何支持的时间间隔(日,周,月,季,年)对数据进行分组(http://www.postgresql.org/docs /8.3/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC).
问题是某些查询会在所需的时间段内提供连续的结果,如下所示:
select to_char(date_trunc('month',date), 'YYYY-MM-DD'),count(distinct post_id)
from some_table where category_id=1 and entity_id = 77 and entity2_id = 115
and date <= '2008-12-06' and date >= '2007-12-01' group by
date_trunc('month',date) order by date_trunc('month',date);
to_char | count
------------+-------
2007-12-01 | 64
2008-01-01 | 31
2008-02-01 | 14
2008-03-01 | 21
2008-04-01 | 28
2008-05-01 | 44
2008-06-01 | 100
2008-07-01 | 72
2008-08-01 | 91
2008-09-01 | 92
2008-10-01 | 79
2008-11-01 | 65
(12 rows)
Run Code Online (Sandbox Code Playgroud)
但有些人因为没有数据而错过了一些间隔,因为这个:
select …Run Code Online (Sandbox Code Playgroud) 我有一个表,可以在一段时间内存储网络上的带宽使用情况.一列将包含日期时间(主键),另一列将记录带宽.每分钟记录一次数据.我们将在那个时刻记录其他数据.
如果用户以15分钟的间隔(在给定的开始和结束日期的24小时内)请求数据,是否可以使用单个查询来获取我需要的数据,或者我是否必须编写存储过程/光标来执行此操作?然后,用户可以请求5分钟间隔数据等.
我很可能会使用Postgres但是还有其他NOSQL选项会更好吗?
有任何想法吗?
这是我到目前为止的查询,创建每日栏:
SELECT DISTINCT date_trunc('hour',t) AS date,
min(price) OVER w,
max(price) OVER w,
first_value(price) OVER w,
last_value(price) OVER w
FROM ticker
WINDOW w AS (PARTITION BY date_trunc('hour',t));
Run Code Online (Sandbox Code Playgroud)
将"小时"更改为"分钟"或"天"将为我提供与这些单位对应的条形图.
但是,如果我想要5分钟或15分钟的酒吧怎么办?date_trunc()不支持这些,我正在寻找一个很好的方式来做到这一点.
我正在使用PostgreSQL 9.6.我有这样一张桌子:
mac sn loc time date vin1 vin2 vin3
1a34 4as11111111 aaaa 7:06:18 1/1/2018 447.42 472.32 682.59
1a34 4as11111111 aaaa 7:06:43 1/1/2018 455.97 476.25 682.59
1a34 4as11111111 aaaa 7:07:35 1/1/2018 470.88 484.2 682.5
Run Code Online (Sandbox Code Playgroud)
我需要计算的平均vin1,vin2,vin3300秒(5分钟)的时间间隔内.例如,从第一次(7:06:18 - 7:11:18)开始,为范围内的日期.我可以使用此查询选择我需要的数据:
select * from table
where sn='4as11111111' and date between '2018-01-01' and '2018-01-02';
Run Code Online (Sandbox Code Playgroud)
但我不知道如何用300秒的时间间隔组,并为计算平均vin1,vin2,vin3对于那些5分钟间隔栏,让这样的事情:
mac sn loc time date vin1_av vin2_av vin3_av
1a34 4as11111111 aaaa 7:06:18 1/1/2018 450.0 480.32 600.59
1a34 4as11111111 …Run Code Online (Sandbox Code Playgroud)