来自MySQL范围的每日图表

时间:2014-07-30 10:11:49

标签: mysql

我正在尝试制作一个每天都有一个点的图表,显示每天存在的马数。

这是我拥有的数据(MySQL)

的示例
horse_id   |   start_date   |   end_date    |
1          |   2011-04-02   |   2011-04-03  |
2          |   2011-04-02   |   NULL        |
3          |   2011-04-04   |   2014-07-20  |
4          |   2012-05-11   |   NULL

因此,关于该数据的图表应该从2011-04-02开始每天输出一行并以CURDATE结束,因为每天它应该返回已注册的马数。

我不能完全理解我将如何做到这一点,因为我只有每个项目的开始日期和结束日期,我想知道当天有多少人出现。

现在,我每天都会进行循环和SQL查询,但这是 - 正如您可能猜到的 - 数以千计的查询,我希望它可以更聪明地完成。

如果2011-04-02之间的某一天现在什么都没有,我仍然想要它,但是有一个0.

如果可能的话,我希望避免每天都有一个包含计数的行。

我希望它有意义,我非常困在这里。

1 个答案:

答案 0 :(得分:0)

你应该拥有的是一张表格,其中只包含至少从当前表格中的最早日期到当前日期的日期。

然后你可以使用这个表左边加入它:

SELECT
dt.date,
COUNT(yt.horse_id)
FROM
dates_table dt
LEFT JOIN your_table yt ON dt.date BETWEEN yt.start_date AND COALESCE(end_date, CURDATE())
GROUP BY dt.date

请务必在COUNT()函数中添加your_table列,否则它也会计算NULL值。

COALESCE()函数返回其参数的第一个而不是NULL,因此如果您没有指定end_date,则会改为使用当前日期。