Tôi cần nhận được số tiền trong vòng 7 ngày cho mỗi hàng (1 hàng mỗi ngày).
Ví dụ:
| Date | Count | 7-Day Rolling Sum |
------------------------------------------
| 2016-02-01 | 1 | 1
| 2016-02-02 | 1 | 2
| 2016-02-03 | 2 | 4
| 2016-02-04 | 2 | 6
| 2016-02-05 | 2 | 8
| 2016-02-06 | 2 | 10
| 2016-02-07 | 2 | 12
| 2016-02-08 | 2 | 13 --> here we start summing from 02-02
| 2016-02-09 | 2 | 14 --> here we start summing from 02-03
| 2016-02-10 | 5 | 17 --> here we start summing from 02-04
Tôi cần điều này trong một truy vấn trả về các hàng với tổng số 7 ngày và ngày của ngày cuối cùng của phạm vi tổng. Ví dụ: ngày = 2016-02-10, tổng 17.
Cho đến nay tôi có cái này nhưng nó không hoạt động đầy đủ:
DO
$do$
DECLARE
curr_date date;
num bigint;
BEGIN
FOR curr_date IN (SELECT date_trunc('day', d)::date FROM generate_series(CURRENT_DATE-31, CURRENT_DATE-1, '1 day'::interval) d)
LOOP
SELECT curr_date, SUM(count)
FROM generate_series (curr_date-8, curr_date-1, '1 day'::interval) d
LEFT JOIN m.ping AS p ON p.date = d
LEFT JOIN m.ping_type AS pt ON pt.id = p.ping_type_id
LEFT JOIN m.ping_frequency AS pf ON pf.id = p.ping_frequency_id
WHERE
pt.url_slug = 'active' AND
pf.url_slug = 'weekly';
END LOOP;
END
$do$;
Tôi đang sử dụng PostgreSQL 9.4.5. Có thể có nhiều hàng với cùng một ngày. Nếu có một khoảng cách (thiếu một ngày), phạm vi 7 ngày liên tục sẽ vẫn được theo dõi.