【发布时间】:2015-09-26 05:27:43
【问题描述】:
我在 PostgreSQL 中有一个这样创建的表:
-- Table: myTable
-- DROP TABLE myTable;
CREATE TABLE myTable
(
"TimeStamp" double precision,
"Temperature" double precision,
"Pressure" double precision,
"Milligrams" double precision,
table_pkey serial NOT NULL,
CONSTRAINT myTable_pkey PRIMARY KEY (table_pkey)
);
TimeStamp 是从某一天开始经过的秒数。
我了解了如何将一些表格行平均起来以生成一个精简表格。例如,
SELECT AVG("TimeStamp") "Seconds", AVG("Temperature") "Temperature",
AVG("Pressure") "Pressure", AVG("Milligrams") "Milligrams"
FROM (SELECT ROW_NUMBER() OVER(ORDER BY null) - 1 rn, * FROM myTable) t
GROUP BY (rn/120)
ORDER BY rn/120
将输出一个由每个输出行 120 个输入行的因子压缩的表。
我不想对一些行数进行平均,而是想对一些 TimeStamp 跨度进行平均。例如,生成一个表格,其中每行包含一天中每个小时的平均值。
编辑
这与将时间戳列更改为 typestamp 类型相结合似乎有效:
SELECT date_trunc('hour', "Acquired"), AVG("Temperature"),
AVG("Pressure"), AVG("Milligrams")
FROM myTable
WHERE 1=1
GROUP BY date_trunc('hour', "Acquired")
ORDER BY 1
【问题讨论】:
-
您的“TimeStamp”列的 0 值是多少? PostgreSQL 有一个
timestamp数据类型,它是自1970-01-01 00:00:00以来经过的秒数。如果您的时间戳具有相同的基础,我建议您将列更改为timestamp类型,以便您可以使用 PostgreSQL 中所有可用的标准日期/时间操作例程。
标签: postgresql timestamp