我有 1 个包含类似数据的表:
CustomerID | ProjectID | DateListed | DateCompleted
123456 | 045 | 07-29-2010 | 04-03-2011
123456 | 123 | 10-12-2011 | 11-30-2011
123456 | 157 | 12-12-2011 | 02-10-2012
123456 | 258 | 06-07-2011 | NULL
基本上,客户与我们联系,我们在列表中找到一个项目,并在完成后将其标记为已完成。
我所追求的是所有项目的简单(至少你会认为)计数,预期输出如下:
YEAR | TotalListed | TotalCompleted
2010 | 1 | 0
2011 | 3 | 2
2012 | 0 | 1
但是,我下面的查询 - 因为加入 - 没有显示 2012 年的计数,因为没有列出 2012 年的项目。但是,我不能真正反转查询,因为那时 2010 年的计数不会显示(因为什么都没有于 2010 年完成)。
我愿意接受任何建议或如何做到这一点的提示。我考虑过临时表,这是最好的方法吗?我愿意接受任何能得到我需要的东西!
(如果代码看起来很熟悉,你们会帮我制作子查询!带有主查询数据变量的 MySQL 子查询)
SELECT YEAR(p1.DateListed) AS YearListed, COUNT(p1.ProjectID) As Listed, PreQuery.Completed
FROM(
SELECT YEAR(DateCompleted) AS YearCompleted, COUNT(ProjectID) AS Completed
FROM projects
WHERE CustomerID = 123456 AND DateListed >= DATE_SUB(Now(), INTERVAL 5 YEAR)
GROUP BY YEAR(DateCompleted)
) PreQuery
RIGHT OUTER JOIN projects p1 ON PreQuery.YearCompleted = YEAR(p1.DateListed)
WHERE CustomerID = 123456 AND DateListed >= DATE_SUB(Now(), INTERVAL 5 YEAR)
GROUP BY YearListed
ORDER BY p1.DateListed