2013-04-26 83 views
1

假設我們有一個包含三個字段id(int,primary),price(double),date(datetime)的表(例如sales)。如何發現MySQL中每月的每一天的總和?

我們如何才能得到price屬性的總和到當月的每一天?

到最後一個月?

我需要類似的東西太多回報:

01  02  03  04  ...  30 
101.1  233.43 1232.42 3232.21    121.23 

01  02  03  04  ...  30  31 
11.1  23.43  122.42 332.21    121.23 2323.32 

我們怎麼能執行呢?

請給我一個SQL爲例。

我想寫一個方法來發現一個月的天數,而不是迭代地創建SQL,但我認爲這不是最好的方法。

+2

'select sum(price)... group by year(datefield),month(datefield),day(datefield)' – 2013-04-26 14:43:42

+1

您希望結果是水平的嗎? – Kermit 2013-04-26 14:51:50

+0

@FreshPrinceOfSO,水平是不是真的需要,thx通知。 – GarouDan 2013-04-26 17:09:54

回答

0

收集所有的想法(THX @MarcB,@Stephan,@GordonLinoff)的SQL波紋管就是我在尋找:

SELECT 
    SUM(price) AS daySum 
FROM 
    sales 
WHERE 
    date BETWEEN DATE_FORMAT(NOW() - INTERVAL 2 MONTH,'%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 2 MONTH),'%Y-%m-%d 23:59:59') 
GROUP BY 
    YEAR(date), 
    MONTH(date), 
    DAY(date) 

4月(我們目前在4月份)

SELECT 
    SUM(price) AS daySum 
FROM 
    sales 
WHERE 
    date BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW()),'%Y-%m-%d 23:59:59') 
GROUP BY 
    YEAR(date), 
    MONTH(date), 
    DAY(date) 

Thx很多。

+1

非常感謝!你知道如何做到這一點,即使是沒有訂單的日期,它也會顯示0.現在它只會擺脫那一天的結果並給出不一致的結果(有些日子將會丟失) – 2016-02-02 21:07:45

2

你真正想要做的樞軸:

select year(date), month(date), 
     sum(case when day(date) = 1 then price end) as price_01, 
     sum(case when day(date) = 2 then price end) as price_02, 
     . . . 
     sum(case when day(date) = 31 then price end) as price_31 
from sales 
group by month(date), year(date) 

然後添加一個where子句所需的日期。喜歡的東西:

where month(date) = month(now())