2016-04-12 14 views
1

id、type、value、created_atという列を持つテーブルがあり、最後の12時間を1つのクエリで合計します。結果は1時間前に配列に格納されます。私はちょうど1のクエリでこれを解決するためにどのように任意の手掛かりを持っていけない各時間の最後の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

してグループを試すことができ、それはCURRENT_TIMESTAMPの時間を含め過去12時間の合計(値)を返します()。特定の時間の行がない場合、その時間の集計にはゼロが返されます。

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'); 
関連する問題