没有空格的日期范围的SQL

时间:2013-08-19 12:56:24

标签: sql date diagram mysql5

我需要从表中生成数据图表。此表格具有以下日期:

Timestamp | Value
01-20-2013| 5
01-21-2013| 7
01-22-2013| 3
01-25-2013| 5

正如您所看到的,并非每个日期都有值。如果我把它放到图表中,它看起来很奇怪。日期用于X轴。由于缺少01-23-2013和01-24-2013,这些值要么没有打印在图表中(看起来很奇怪),要么被打印出来,图表的行从3直接变为5而不是0,因为它应该

是否有办法通过SQL选择数据,使其如下所示:

Timestamp | Value
01-20-2013| 5
01-21-2013| 7
01-22-2013| 3
01-23-2013| 0
01-24-2013| 0
01-25-2013| 5

感谢任何帮助!

此致 亚历

编辑:我不知道数据库引擎是那么重要。这是在MySQL 5数据库上运行的(不确定完整的版本字符串)。

1 个答案:

答案 0 :(得分:2)

根据数据库的不同,有多种方法可以执行此操作。众所周知,日期函数与数据库无关。

这是一种使用"驱动程序"包含所有日期的表,并将其用于左外连接:

select driver.timestamp, coalesce(t.value, 0) as value
from (select distinct timestamp + n.n as timestamp
      from t cross join
           (select 0 as n union all select 1 union all select 2 union all select 3
           )
     ) driver left outer join
     t;

此版本假设存在不超过三天的差距。

在某些数据库中,您可以使用递归CTE构建日期列表。这种方法可以处理任何规模的差距。