Itu tidak cantik, karena harus menggabungkan empat salinan tabel Anda ke dirinya sendiri, yang bisa memukul segala macam masalah kinerja (saya sangat menyarankan Anda untuk memiliki indeks di id
dan date
)... tapi ini akan berhasil:
SELECT y.report_date, SUM(x.value)
FROM mytable AS x
NATURAL JOIN (
SELECT a.id, b.date AS report_date, MAX(c.date) AS date
FROM (SELECT DISTINCT id FROM mytable) a JOIN
(SELECT DISTINCT date FROM mytable) b JOIN
mytable AS c ON (c.id = a.id AND c.date <= b.date)
GROUP BY a.id, b.date
) AS y
GROUP BY y.report_date
Lihat di sqlfiddle .