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;
我有一个 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;