1

假设我们有一个sales包含三个字段id(int、primary)、price(double)、date(datetime)的表(例如)。

我们如何才能得到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,但我认为这不是最好的方法。

4

2 回答 2

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())
于 2013-04-26T15:19:31.310 回答
1

收集所有想法(谢谢@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)

四月(我们现在是四月)

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)

多谢。

于 2013-04-26T17:14:07.947 回答