группа по дням за последние 5 дней - PullRequest
4 голосов
/ 22 июля 2011

Я пытаюсь выбрать сумму целочисленного поля за последние 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 ]

7 голосов
/ 22 июля 2011
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 голос
/ 22 июля 2011

используйте функцию форматирования для возврата номера дня недели: SELECT DATE_FORMAT (the_date, '% w');

0 голосов
/ 22 июля 2011

используйте между

как выбрать * из XXX, где дата между датой (...) и датой (...) группируется по дате Лимит 0,5 должен сделать это

...