我正在尝试选择过去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
等
答案 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 应该这样做