我在Postgres中还比较新,我的目标是为每个月的每一天计算总和值(即每日总和值)。根据分散的信息,我想到了以下内容:
CREATE OR REPLACE FUNCTION sumvalues() RETURNS double precision AS
$BODY$
BEGIN
FOR i IN 0..31 LOOP
SELECT SUM("Energy")
FROM "public"."EnergyWh" e
WHERE e."DateTime" = day('01-01-2005 00:00:00'+ INTERVAL 'i' DAY);
END LOOP;
END
$BODY$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF;
ALTER FUNCTION public.sumvalues()
OWNER TO postgres;
查询已成功返回,所以我认为我已经做对了。然而,当我试图将函数的值插入到一个表中时(这可能是错误的):
INSERT INTO "SumValues"
("EnergyDC")
(
SELECT sumvalues()
);
我得到了这个错误信息:
ERROR: 无效的时间间隔输入语法: "01-01-2005 00:00:00" 第3行: WHERE e."DateTime" = day('01-01-2005 00:00:00'+ INTERVAL...
我尝试自己调试,但仍不确定我做错了哪一个(或两个),以及为什么会出错。
这是一个示例:EnergyWh。
(我使用系统ID和日期时间作为复合主键,但应该不重要。)