2014-09-24 77 views
1

我有表,其中日期存儲如表3列,即如下MySQL的GROUP BY具有多個列的

`periodYear` 
`periodMonth` 
`billDay` 

這是造成我的問題,我想根據日期來生成報告,其中是以上三者的組合。例如

SELECT SUM(amount) as Total, 
FROM invoice 
WHERE `periodYear` = 2014, 
GROUP BY `billDay`,`periodMonth`,`periodYear` 

有人可以幫我解釋如何解決這個問題嗎?

比如我想列出所有的總數去年每天的基礎上,

如果它是一個日期列,我可以按日期剛組,但在這種情況下,我不知道該怎麼做,因爲如果你按照Billday分組,那麼它會根據當天的組而不是DATE ..你明白我的意思了嗎?

+1

你遇到了什麼問題? *我相信這些額外的逗號是拼寫錯誤,對嗎?* – 2014-09-24 04:26:16

+0

這些列的類型是什麼?數字或字符爲基礎? – 2014-09-24 04:27:59

+0

例如,我想列出去年在每日基數上的所有總帳,如果它的日期顏色我可以按日期分組,但在這種情況下,我不知道如何做到這一點,因爲如果你分組Billday,..,然後它會根據當天的日程而不是DATE ..你明白我的意思了嗎? – mahen3d 2014-09-24 04:28:32

回答

1

你可以只串連的值加在一起,然後組上:

SELECT SUM(amount) as Total FROM invoice 
WHERE periodYear=2014 
GROUP BY CONCAT(billDay, '-', periodMonth, '-', periodYear) 

或者,如果你想轉換爲實際的日期格式,方便事後排序:

SELECT SUM(amount) as Total FROM invoice 
WHERE periodYear=2014 
GROUP BY CONCAT(periodYear, 
       '-', 
       LPAD(periodMonth, 2, '00'), 
       '-', 
       LPAD(billDay, 2, '00') 
) 
+1

謝謝你的工作就像一個魅力.. :) – mahen3d 2014-09-24 04:39:30

4

試試這個,

SELECT SUM(amount) as Total FROM invoice WHERE `periodYear`=2014 GROUP BY CONCAT(periodYear, '-', periodMonth, '-', billDay); 
0

我想你想要的只是你試過的相反。

SELECT SUM(amount) as 'Total' 
FROM `invoice` 
WHERE `periodYear` = 2014 
GROUP BY `periodYear`, `periodMonth`, `billDay` 

這將按年份,然後按月份,然後按天。從最大到最小。