【发布时间】:2022-01-21 15:11:03
【问题描述】:
我有以下表格:
CREATE TABLE sensor (
id int PRIMARY KEY,
abbrv varchar(255) NOT NULL UNIQUE
);
和
CREATE TABLE readings (
time timestamp without time zone NOT NULL,
device_id int NOT NULL,
sensor_id int REFERENCES sensor (id) NOT NULL,
value float4 NOT NULL
);
如何查询数据库以返回表
time | device_id | abbrv $1 | ... | abbrv $n
其中 n 范围跨越表格传感器的行,'abbrv $i' 被表格传感器中的相应值替换?
以下查询
SELECT * FROM crosstab(
'SELECT time, device_id, sensor_id, value FROM readings ORDER BY 1, 2',
'SELECT id FROM sensor'
) AS (time timestamp without time zone, device_id int, "sensor_1" float4, "sensor_2" float4, "sensor_3" float4);
在一定程度上起作用:我需要知道传感器表中有多少行,我必须手动设置列的名称。
【问题讨论】:
标签: sql postgresql crosstab