2013-10-09 2 views
0

У меня есть таблица, которая имеет данные через 5-минутные интервалы, т. Е. 5 10 15 20 ...Как добавить минуты в метку времени?

Таблица имеет 3 столбца (номер id, log_ts date, count number) и имеет миллионы строк. До сих пор я использовал следующий запрос, чтобы подвести столбец «count» для определенной даты.

мне нужно агрегировать на ежечасно уровня

select id, SUM(count) 
    log_ts + DECODE(TO_CHAR(log_ts , 'MI'), '05', 55/1440, '10', 50/1440, '15', 45/1440, '20',40/1440,'25',35/1440,'30',30/1440,'35',25/1440,'40',20/1440,'45',15/1440,'50',10/1440,'55',5/1440,0) TS 
from example_table 
Group by id, 
log_ts + DECODE(TO_CHAR(log_ts , 'MI'), '05', 55/1440, '10', 50/1440, '15', 45/1440, '20',40/1440,'25',35/1440,'30',30/1440,'35',25/1440,'40',20/1440,'45',15/1440,'50',10/1440,'55',5/1440,0) 

Есть ли другой способ объединить колонки времени на часовом уровне, который имеет данные в уровне 5 минут.

ответ

2

Вам необходимо использовать TRUNC(), который может усекать дату/номер и т. Д. До единицы времени.

Почасово, format model является HH. Это делает запрос:

select trunc(log_ts, 'HH'), sum(count) 
    from example_table 
group by trunc(log_ts, 'HH') 

Я предполагаю, что имя вашей колонки на самом деле не COUNT. Если это так, я бы рекомендовал изменить это на то, что не является ключевым словом.

+0

Нет, это не :). – redsoxlost

0

Попробуйте, как это,

SELECT id, trunc(log_ts, 'HH'), sum(count) 
FROM example_table 
GROUP BY id, trunc(log_ts, 'HH'); 
Смежные вопросы