MySQL:用最后一个已知值填补空白

MySQL: fill in the gaps with last known value

我有一个 table 包含不同报告日期的全球销售数据,如下所示:

    event_id   | date          | sales_on_date
    -----------+---------------+----------
    1          | 2015-01-01    | 1000
    1          | 2015-02-01    | 1500
    1          | 2015-03-01    | 1600
    2          | 2015-01-01    | 200
    2          | 2015-02-01    | 500
    3          | 2015-01-01    | 100

而且我需要编写一个 SELECT 语句来输出每个日期的销售额(或最后已知的销售额),如下所示:

    event_id   | date          | sales_on_date
    -----------+---------------+----------
    1          | 2015-01-01    | 1000
    1          | 2015-02-01    | 1500
    1          | 2015-03-01    | 1600
    2          | 2015-01-01    | 200
    2          | 2015-02-01    | 500
    2          | 2015-03-01    | 500
    3          | 2015-01-01    | 100
    3          | 2015-02-01    | 100
    3          | 2015-03-01    | 100

目前,我必须发出 SQL 请求以从我的 table 中获取所有数据,然后使用 PHP 例程来填补空白,但它似乎是'pure' SQL 解决方案会更加方便和优雅。

知道如何在 SQL 中执行此操作吗?

这有点复杂,因为查询有两部分。首先是生成所有行。第二个是填写。第一个是 CROSS JOIN。第二个相关子查询:

select e.event_id, d.date,
       (select t.sales_on_date
        from t
        where t.event_id = e.event_id and t.date <= d.date
        order by t.date desc
        limit 1
       ) as sales_on_date
from (select distinct event_id from t) e cross join
     (select distinct date from t) d
order by e.event_id, d.date;