Det är inte snyggt, eftersom det måste sammanfoga fyra kopior av ditt bord till sig själv, vilket kan drabba alla typer av prestationssmärta (jag starkt råder dig att ha index på id
och date
)... men det här gör susen:
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
Se den på sqlfiddle .