所以我有一张桌子,我收集我所做工作的数据。每次创建作业时,我都会为其指定日期。这个问题是我没有工作的日子没有存储在数据库中,因此当我绘制数据时,我从未看到我没有工作的日子。
我当前的查询如下所示:
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
不会显示在结果中,因为它从未存储在那里。
有没有办法显示缺少的日期?
谢谢,
马拉
答案 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没有合理的方法,没有创建一个包含每个日期的表格。您最好的选择是更改使用该查询结果的应用程序来填充漏洞本身。而不是只绘制它收到的值,用一个简单的循环构造它自己的一组值;每次计算一天,从查询中填写值,无论它们在哪里。