【问题标题】:SQL of a daterange without empty spaces没有空格的日期范围的 SQL
【发布时间】:2013-08-21 06:47:09
【问题描述】:

我需要根据表格中的数据生成图表。此表的日期如下:

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 数据库上运行的(不确定完整的版本字符串)。

【问题讨论】:

  • 您使用的是什么数据库系统?
  • 什么版本的 SQL?这是 SQL 服务器的方法...stackoverflow.com/questions/12597143/…
  • 这是一个 MySQL 5 数据库。对不起。我在上面添加了此信息。

标签: sql date diagram mysql5


【解决方案1】:

有多种方法可以做到这一点,具体取决于数据库。众所周知,日期函数是独立于数据库的。

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

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 构造日期列表。这种方法可以处理任何大小的间隙。

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多