我有一个如下所示的 SQL 表:
CREATE TABLE diet_watch (
entry_date date NOT NULL,
user_id int default 1,
weight double precision NOT NULL
);
INSERT INTO diet_watch VALUES ('2001-01-01', 1, 128.2);
INSERT INTO diet_watch VALUES ('2001-01-02', 1, 121.2);
INSERT INTO diet_watch VALUES ('2001-01-03', 1, 100.6);
INSERT INTO diet_watch VALUES ('2001-01-04', 1, 303.7);
INSERT INTO diet_watch VALUES ('2001-01-05', 1, 121.0);
INSERT INTO diet_watch VALUES ('2001-01-01', 2, 121.0);
INSERT INTO diet_watch VALUES ('2001-01-06', 2, 128.0);
INSERT INTO diet_watch VALUES ('2001-01-07', 2, 138.0);
INSERT INTO diet_watch VALUES ('2001-01-01', 3, 128.2);
INSERT INTO diet_watch VALUES ('2001-01-02', 3, 125.5);
INSERT INTO diet_watch VALUES ('2001-01-03', 3, 112.8);
INSERT INTO diet_watch VALUES ('2001-01-06', 3, 111.2);
我还有这张表:
CREATE TABLE summing_period (
user_id INT NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL);
insert into summing_period VALUES (1, '2001-01-01', '2001-01-03');
insert into summing_period VALUES (2, '2001-01-02', '2001-01-06');
insert into summing_period VALUES (3, '2001-01-03', '2001-01-06');
我想编写一个返回 DISTINCT ROWS 的查询,其中包含以下列:
- user_id _
- 表 summing_period 中指定日期之间表中权重的总和(对于 user_id)
diet_watch
所以根据表求和周期的数据查询的结果应该是:
1,350.0
2,128.0
3,224.0
不幸的是,这一次,我已经达到了我的 SQLfu 的极限——我什至不知道如何开始编写 SQL。理想情况下,解决方案应该是 ANSI SQL(即 db 不可知论)。但是,由于我正在开发 PostgreSQL 8.4 后端,如果解决方案以 db 为中心,它至少必须在 PG 上运行。