2017-02-28 9 views
0

GROUP BYで日付を正しく処理できないようです。現在、DATE_FORMATに '%m /%e /%Y'を使用しているかのようにグループ化されています。GROUP BYをグループ化しないDATE_FORMATをSELECTで変更する

SELECT 
DATE_FORMAT(STR_TO_DATE(Invoice.Date, '%m/%e/%Y'), '%m-%Y') AS Date, 
SUM(Invoice.Amount) AS TotalAmount 
FROM Invoice 
WHERE STR_TO_DATE(Invoice.Date, '%m/%e/%Y') BETWEEN DATE_SUB(NOW(), INTERVAL 2 YEAR) AND NOW() 
GROUP BY Date 
ORDER BY Date 

電流出力(あなたが見ることができるように、それは何とかまだ%の電子部品を見ているので、それは各月の倍数を示し):

01-2016 | 24017 
01-2016 | 28886 
01-2016 | 0 
01-2016 | 31653 
01-2016 | 18521 
01-2017 | 29409 
01-2017 | 23370 
01-2017 | 37611 
01-2017 | 14535 
02-2016 | 16365 
02-2016 | 27930 

予想される出力:

01-2016 | 103077 
01-2017 | 123446 
02-2016 | 44295 

答えて

0

あなたはgroup byの同じ表現:

SELECT 
DATE_FORMAT(STR_TO_DATE(Invoice.Date, '%m/%e/%Y'), '%m-%Y') AS Date, 
SUM(Invoice.Amount) AS TotalAmount 
FROM Invoice 
WHERE STR_TO_DATE(Invoice.Date, '%m/%e/%Y') BETWEEN DATE_SUB(NOW(), INTERVAL 2 YEAR) AND NOW() 
GROUP BY DATE_FORMAT(STR_TO_DATE(Invoice.Date, '%m/%e/%Y'), '%m-%Y') 
ORDER BY Date 
+0

は完璧勤務しました。ありがとう! –

0

クエリにはDateの名前があいまいであるという問題があります。列の別名に固有の記述的な名前を使用して、既存の列名と衝突しないようにすることが最善です。

あなたが列の別名がdate_monthのようなものに変更すると、予想通り、あなたのクエリは動作するはずですが:

SELECT 
DATE_FORMAT(STR_TO_DATE(Invoice.Date, '%m/%e/%Y'), '%m-%Y') AS date_month, 
SUM(Invoice.Amount) AS TotalAmount 
FROM Invoice 
WHERE STR_TO_DATE(Invoice.Date, '%m/%e/%Y') BETWEEN DATE_SUB(NOW(), INTERVAL 2 YEAR) AND NOW() 
GROUP BY date_month 
ORDER BY date_month 
関連する問題