次のような 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 (つまり、データベースに依存しない) である必要があります。ただし、私は PostgreSQL 8.4 バックエンドを開発しているため、ソリューションが db 中心の場合、少なくとも PG で実行する必要があります。