同様のデータを持つテーブルが 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年に完成しました)。
これを行う方法などの提案やヒントをお待ちしています。一時テーブルについて熟考しましたが、それが最善の方法ですか? 私は、私が必要とするものを得るために、何に対してもオープンです!
(コードに見覚えがある場合は、サブクエリを作成するのを手伝ってくれます!メイン クエリ データ変数を使用した 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