我得到了以下MySQL表,将值存储到特定日期:
| date | value |
======================
| 2009-03-29 | 0.5 |
| 2010-01-30 | 0.55 |
| 2011-08-12 | 0.67 |
现在我需要另一个表格,将这些值映射到表格中第一个和最后一个日期范围内的每一天(填补空白)。所以最后看起来应该是这样的:
| date | value |
======================
| 2009-03-29 | 0.5 |
| 2009-03-30 | 0.5 |
| 2009-04-01 | 0.5 |
| ... | ... |
| 2010-01-30 | 0.55 |
| 2010-02-01 | 0.55 |
| 2010-02-02 | 0.55 |
| ... | ... |
| 2011-08-10 | 0.55 |
| 2011-08-11 | 0.55 |
| 2011-08-12 | 0.67 |
有没有办法在SQL查询中解决这个问题?
答案 0 :(得分:1)
从另一个案例来看,你似乎正在做的是在一段时间内显示价值趋势,即使每天都没有提供价值......所以,你可能从10月1日开始, 2011年至2011年12月1日(或该事项的任何其他日期范围)。
您可以使用mysql变量并加入ANY表(我有“AnyOtherTableInYourDatabase”)至少具有您想要回顾的天数,从而轻松地模拟整个日期范围。在仅仅是日期的示例中,我从当前日期开始,然后跑回说... 60天。您也可以使用其他内容更改“开始日期”,并根据需要返回/转发。
select JustDates.OneDate
from
( SELECT
@r:= date_add(@r, interval 1 day ) OneDate
FROM
(select @r := current_date()) vars,
AnyOtherTableInYourDatabase limit 30 ) JustDates
现在,要获得最新的“阅读”,请通过select / from添加到列。然后,将该结果集重新连接到原始读数表以获得有问题的值
select
PreQuery.OneDate,
PreQuery.LatestReading,
Y2.Value
from
( select JustDates.OneDate,
( select max( YRT.Date )
from YourReadingsTable YRT
where YRT.Date <= JustDates.OneDate ) as LatestReading
from
(SELECT @r:= date_add(@r, interval 1 day ) OneDate
FROM (select @r := current_date()) vars,
AnyOtherTableInYourDatabase limit 30 ) JustDates ) PreQuery
JOIN YourReadingsTable Y2
on PreQuery.LatestReading = Y2.Date