2016-04-12 2 views
1

У меня есть таблица с идентификаторами столбцов, типом, значением, created_at, и я хочу суммировать последние 12 часов с одним запросом. Результат должен быть в массиве для каждого часа назад.Обобщите значения базы данных за последние 12 часов за каждый час

На данный момент я использую этот запрос для выборки данных в течение часа:

select sum(`value`) as aggregate from `clan_values` where `type` = '2' and `created_at` between '2016-04-12 10:00:00' and '2016-04-12 10:59:59' 

Я не имею никакого понятия, как решить эту проблему с помощью только одного запроса.

спасибо.

ответ

1

вы можете попробовать использовать этот запрос, он будет возвращать сумму (стоимость) за последние 12 часов, включая час CURRENT_TIMESTAMP(). Если в течение определенного часа нет строк, вы получите нуль для совокупности этого часа.

SELECT sum(IFNULL(`value`,0)) as aggregate, 
     MyTime.MyHour, 
     DATE_ADD(DATE(created_at), 
        INTERVAL HOUR(created_at) hour) as ActualHour 
FROM 
    (SELECT DATE_ADD(DATE(CURRENT_TIMESTAMP()), 
        INTERVAL HOUR(CURRENT_TIMESTAMP())-hour.count hour) as MyHour 
    FROM 
    (SELECT 0 as count 
    UNION SELECT 1 
    UNION SELECT 2 
    UNION SELECT 3 
    UNION SELECT 4 
    UNION SELECT 5 
    UNION SELECT 6 
    UNION SELECT 7 
    UNION SELECT 8 
    UNION SELECT 9 
    UNION SELECT 10 
    UNION SELECT 11)AS Hour 
    )as MyTime LEFT JOIN 
    `clan_values` ON DATE_ADD(DATE(created_at),INTERVAL HOUR(created_at) hour) = MyTime.MyHour 
AND `type` = '2' 
GROUP BY MyTime.MyHour,ActualHour 
ORDER BY MyTime.MyHour ASC 

sqlfiddle

1

Вы можете попробовать группу на date_format% H

select sum(`value`) as aggregate 
from `clan_values` 
where `type` = '2' and `created_at` between '2016-04-12 10:00:00' and '2016-04-12 10:59:59' 
group by DATE_FORMAT(`created_at`,'%H'); 
Смежные вопросы