在 PostgreSQL 9.5 中,我有一个名为的表reports
:
CREATE TABLE public.reports (
id BIGSERIAL PRIMARY KEY,
id_station character(11) NOT NULL,
date date NOT NULL,
element character(4) NOT NULL,
value smallint NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
对于每个站(id_station
列)和每一天(date
列),我可能有多个值类型(元素列) : TMIN
, TMAX
, TAVG
(有时这些值不存在:对于给定的一天,我可能只有 aTMIN
和 a TMAX
)。
这是一个(假)样本:
22;"FR069029001";"1925-01-01";"TMAX";130
23;"FR069029001";"1925-01-01";"TMIN";-25
24;"FR069029001";"1925-01-01";"TAVG";0
Run Code Online (Sandbox Code Playgroud)
我想使用此表将每个站点和每天的这些值合并在一行中:
CREATE TABLE public.reports_con (
id SERIAL PRIMARY KEY,
id_station character(11) NOT NULL,
date date NOT NULL,
tmin smallint,
tmax smallint,
tavg smallint
);
Run Code Online (Sandbox Code Playgroud)
我想达到这个结果: …
目前我创建了一个视图,请在答案中查看。如何根据该crosstab()
查询创建函数,以便传递日期并获取特定日期的数据?
多次调用该函数并传递不同的日期来填充图表(例如)也是一种好习惯吗?