5

Zabbix DB に毎分ロードされる値があります。たとえば、2013 年 3 月 20 日未満の場合、時間 >= 0:00 および < 1:00 などの値の合計を含む 0:00 の行が必要です。次に、午前 1 時から午前 2 時までの間に別の行を作成します。以下のクエリを使用していますが、時間を変更し続ける必要があります。私が探しているのは、1 日の 1 時間ごとに 24 行を生成するクエリです。助けてください。

SELECT 
    SUM(CASE WHEN itemid = 23661
        THEN value ELSE 0 END) Hits 
    FROM history_uint WHERE 
        clock >= EXTRACT(EPOCH FROM TIMESTAMP '2013-03-24 00:00:00')
         AND clock < EXTRACT(EPOCH FROM TIMESTAMP '2013-03-24 01:00:00')
4

3 に答える 3

1

結果を時間ごとにグループ化してみましたか?

SELECT DATEPART(HOUR, timestamp) [HOUR]
, SUM(CASE WHEN itemid = 23661 THEN value ELSE 0 END) hits 
FROM history_uint
WHERE clock >= EXTRACT(EPOCH FROM timestamp '2013-03-24')
  AND clock < EXTRACT(EPOCH FROM timestamp '2013-03-25')
GROUP BY DATEPART(HOUR, timestamp);
于 2013-03-25T12:37:20.690 に答える
0

何かのようなもの:

select '2013-03-20'::date + delta * '1 hour'::interval
from generate_series(0,23) g(delta)
于 2013-03-25T12:10:55.077 に答える
0
select
    date_trunc('hour', clock) "hour",
    sum((itemid = 23661)::integer) hits 
from history_uint
group by 1
order by 1

または、すべての時間が満たされている場合:

select
    s.hour, count(itemid = 23661 or null) hits 
from
    (
        select date_trunc('hour', clock) "hour", itemid
        from history_uint
    ) h
    right join (
        select date_trunc('hour', d) "hour"
        from generate_series (
            (select min(clock::date)),
            (select max(clock)::date + 1) - interval '1 hour',
            '1 hour'
        ) s(d)
    ) s on s.hour = h.hour
group by 1
order by 1
于 2013-03-25T12:43:06.307 に答える