2016-04-12 46 views
1

我有一個列id,類型,值,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');