过去5天每天分组

时间:2011-07-22 15:57:54

标签: mysql group-by sum

我正在尝试选择过去5天内整数字段的总和,我需要将其分组为每一天。

我在解决分组方面遇到了一些问题。这是我到目前为止的SQL查询:

select 
    sum(`amount_sale`) as total 
from `sales` 
where the_date >= unix_timestamp((CURDATE() - INTERVAL 5 DAY))

适用于共同生成所有5天的总和,但我需要将其分解,以便显示过去5天中每一天的总和,即:

  

第1天 - $ 200

     

第2天 - $ 500

     

第3天 - $ 20

3 个答案:

答案 0 :(得分:7)

SELECT  DATE(FROM_UNIXTIME(the_date)) AS dt, SUM(amount_sale) AS total
FROM    sales
WHERE   the_date >= UNIX_TIMESTAMP((CURDATE() - INTERVAL 5 DAY))
GROUP BY
        dt

要为缺少的日期返回0

SELECT  dt, COALESCE(SUM(amount_sale), 0) AS total
FROM    (
        SELECT  CURDATE() - INTERVAL 1 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 2 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 3 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 4 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 5 DAY AS dt
        ) d
LEFT JOIN
        sales
ON      the_date >= UNIX_TIMESTAMP(dt)
        AND the_date < UNIX_TIMESTAMP(dt + INTERVAL 1 DAY)
GROUP BY
        dt

这不是一个非常优雅的解决方案,但是,MySQL缺乏从头开始生成记录集的方法。

答案 1 :(得分:1)

使用format函数返回工作日nr:SELECT DATE_FORMAT(the_date,'%w');

答案 2 :(得分:-2)

之间使用

喜欢从XXX中选择*,其中日期(...)和日期之间的日期(...)按日期限制0,5 应该这样做