テーブルの4つのコピーをそれ自体に結合する必要があるため、見栄えがよくありません。これにより、あらゆる種類のパフォーマンスの問題が発生する可能性があります(強く id
にインデックスを付けることをお勧めします およびdate
)...しかし、これでうまくいきます:
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
sqlfiddle でご覧ください 。