2017-02-05 6 views
0


mysql文を作成するにはいくつかの助けが必要です。私は毎日のサルデータを記録する販売テーブルを持っています。 ここでは、過去3年間の週間売上高を週数と並べて比較したいと考えています。過去3年間の週単位のデータを並べて比較するためのMysqlクエリ

sqlfiddleのデータ例を示します。

そして、これは私がこれまで試してみましたものですが、一つだけの週のデータを返している:

SELECT YEARWEEK(s1.sale_date,1) AS weekY1, SUM(s1.total) AS totalY1, 
        YEARWEEK(s2.sale_date,1) AS weekY2, SUM(s2.total) AS totalY2, 
        YEARWEEK(s3.sale_date,1) AS weekY3, SUM(s3.total) AS totalY3 
      from sales_chc s1 
      LEFT JOIN sales_chc s2 
      ON s2.sale_date = (s1.sale_date -INTERVAL 1 YEAR) 
      LEFT JOIN sales_chc s3 
      ON s3.sale_date = (s1.sale_date -INTERVAL 2 YEAR) 
      WHERE YEAR(s1.sale_date) = '2017' AND YEARWEEK(s1.sale_date, 1) = YEARWEEK(CURDATE(), 1)-1 
      GROUP BY YEARWEEK(s1.sale_date, 1) 
+1

あなたのサンプルデータに基づいて、期待される結果は何ですか? – Blank

+0

私は、すべての週(日付まで)を各年度の合計販売金額と共に表示したいと思います。 – sohal07

+0

あなたのGROUP BYは少し疑わしく見えますが、現在のYEARWEEKと等しい** YEARWEEKに制限するWHERE句ではありません(マイナス1、私は有効ではありません)? –

答えて

0

はこれを試してみてください:

SELECT WEEKOFYEAR(s1.sale_date) as WEEKNUM, 
SUM(case when YEAR(s1.sale_date) = '2017' then s1.total else 0 end) AS total2017, 
SUM(case when YEAR(s1.sale_date) = '2016' then s1.total else 0 end) AS total2016, 
SUM(case when YEAR(s1.sale_date) = '2015' then s1.total else 0 end) AS total2015 
from sales_chc s1 
GROUP BY WEEKOFYEAR(s1.sale_date) 
関連する問題