Giả sử tôi hiểu đúng yêu cầu của bạn, tôi nghĩ những gì bạn cần là một cái gì đó dọc theo những dòng sau:
SELECT "periods"."start_date",
"periods"."end_date",
SUM(CASE WHEN "balance_transactions"."created" BETWEEN "periods"."start_date" AND "periods"."end_date" THEN "balance_transactions"."fee" ELSE 0.00 END) AS period_sum
FROM "balance_transactions"
JOIN charges ON balance_transactions.source = charges.balance_id
JOIN ( SELECT '2013-12-20'::date as start_date, '2014-01-19'::date as end_date UNION ALL
SELECT '2013-12-21'::date as start_date, '2014-01-20'::date as end_date UNION ALL
SELECT '2013-12-22'::date as start_date, '2014-01-21'::date as end_date UNION ALL
SELECT '2013-12-23'::date as start_date, '2014-01-22'::date as end_date UNION ALL
SELECT '2013-12-24'::date as start_date, '2014-01-23'::date as end_date
) as periods
ON "balance_transactions"."created" BETWEEN "periods"."start_date" AND "periods"."end_date"
WHERE "balance_transactions"."account_id" = 6
AND "balance_transactions"."type" = 'charge'
AND "charges"."refunded" = false
AND "charges"."invoice" IS NOT NULL
GROUP BY "periods"."start_date", "periods"."end_date"
Điều này sẽ trả lại cho bạn tất cả các khoảng thời gian mà bạn quan tâm trong một tập kết quả. Vì truy vấn được 'tạo' nhanh chóng trong giao diện người dùng của bạn, bạn có thể thêm bao nhiêu hàng vào phần khoảng thời gian tùy thích.
Chỉnh sửa:với một số thử nghiệm và lỗi, tôi đã cố gắng làm cho nó hoạt động [trong sqlFiddle] [1] và cập nhật cú pháp ở trên cho phù hợp.