我需要用可用的最后一个值填充缺失的日期,所以我将开始第一步以获取所有日期的查询,包括日表上缺失的日期。我知道有很多关于填写缺失日期的问题,但在这里我需要该查询的 where 子句。人们通常建议创建一个包含所有日期的单独表,然后使用左连接与其他表来获取所有日期,对于缺少的值,你得到 NULL 这很好。
所以我创建了该表并将其命名为日历,并尝试了以下查询:
SELECT d.`date`, s.`item`, s.state
FROM calendar d LEFT JOIN daily_states s
ON d.`date` = s.`date`
WHERE s.`item` = 'item1'
ORDER BY s.`date` ASC;
希望我得到结果(example1):
Date | Item | State
2013-05-01 item1 state1
2013-05-02 item1 state1
2013-05-03 NULL NULL
2013-05-04 item1 state3
2013-05-05 NULL NULL
2013-05-06 item1 state3
2013-05-07 item1 state1
我确信 item 中只有 NULL 值实际上是 item1,但右表中缺少日期。这样我以后可以用以前的状态填充缺失的项目和状态值,并以此结果结束(示例 2):
2013-05-01 item1 state1
2013-05-02 item1 state1
2013-05-03 item1 state1
2013-05-04 item1 state3
2013-05-05 item1 state3
2013-05-06 item1 state3
2013-05-07 item1 state1
但是由于 WHERE 子句,我得到了这个(结果):
2013-05-01 item1 state1
2013-05-02 item1 state1
2013-05-04 item1 state3
2013-05-06 item1 state3
2013-05-07 item1 state1
所以我仍然没有错过日期。如何获得示例1中的结果?顺便说一句,我用示例制作了SQLfiddle。提前谢谢!