我正在尝试制作一个每天都有一个点的图表,显示每天存在的马数。
这是我拥有的数据(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.
如果可能的话,我希望避免每天都有一个包含计数的行。
我希望它有意义,我非常困在这里。
答案 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,则会改为使用当前日期。