Nó không đẹp, vì nó phải ghép bốn bản sao của bảng của bạn với chính nó, điều này có thể gây ra tất cả các loại đau đớn về hiệu suất (Tôi mạnh mẽ khuyên bạn nên có các chỉ mục trên id
và date
) ... nhưng điều này sẽ thực hiện thủ thuật:
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
Xem nó trên sqlfiddle .