通过MySQL从数据库中检索缺少的日期

时间:2010-06-04 22:10:52

标签: mysql date gaps-and-islands

所以我有一张桌子,我收集我所做工作的数据。每次创建作业时,我都会为其指定日期。这个问题是我没有工作的日子没有存储在数据库中,因此当我绘制数据时,我从未看到我没有工作的日子。

我当前的查询如下所示:

SELECT job_data_date, SUM(job_data_invoice_amount) as job_data_date_income 
FROM job_data 
WHERE job_data_date >= '2010-05-05' 
GROUP BY job_data_date 
ORDER BY job_data_date;

输出结果为:

|   job_data_date   |   job_data_date_income    |
|   2010-05-17      |   125                     |
|   2010-05-18      |   190                     |
|   2010-05-20      |   170                     |

正如您从示例输出中看到的那样,2010-05-19不会显示在结果中,因为它从未存储在那里。

有没有办法显示缺少的日期?

谢谢,

马拉

2 个答案:

答案 0 :(得分:2)

一个想法是,您可以拥有一个表格,其中包含您要显示的所有日期,然后对该表格进行外部联接。

因此,如果您有一个名为alldates的表,其中包含一列(job_data_date):

SELECT ad.job_data_date, SUM(job_data_invoice_amount) as job_data_date_income 
FROM alldates ad left outer join job_data jd on ad.job_data_date = jd.job_data_date 
WHERE ad.job_data_date >= '2010-05-05' 
GROUP BY ad.job_data_date 
ORDER BY ad.job_data_date;

缺点是你需要保持这个表填充你想要显示的所有日期。

答案 1 :(得分:1)

至少在MySQL上使用纯SQL没有合理的方法,没有创建一个包含每个日期的表格。您最好的选择是更改使用该查询结果的应用程序来填充漏洞本身。而不是只绘制它收到的值,用一个简单的循环构造它自己的一组值;每次计算一天,从查询中填写值,无论它们在哪里。