неділя, 12 лютого 2012 р.

Підготовка даних для аналізу: визначення номера 5 хвилинного інтервалу для таймстемпу

Досить часто дані, які мають часову складову, аналізуються з віднесенням того чи іншого конкретного значення (рядка) до певного часового інтервалу (дня, години, хвилини тощо). Наприклад: аналіз дзвінків, прийнятих в певну (цілу) годину протягом дня; заявки, оформлені в певний день тижня тощо.

У випадку, якщо джерелом даних є SQL база даних, із приведенням до згаданих стандартних інтервалів гарно справляються вбудовані функції СУБД для роботи з датами.

Існує ще один (часто вживаний і важливий) інтервал, для обрахунку якого стандартного функціоналу не існує. Це інтервал "5-ти хвилинка".

Спробуємо самостійно написати таку функцію:


CREATE FUNCTION extract_5m_range(timestamp with time zone) RETURNS integer                                  
LANGUAGE plpgsql IMMUTABLE
calc5m_range                                                                                                
AS $_$                                                                                         
begin                                  
return floor(extract('minute' from $1) / 5) + extract('hour' from $1) * 12 + 1;
end; $_$;

Функція отримує аргументом значення з типом даних timestamp with time zone і обраховує для нього номер "п'ятихвилинки" у добі - ціле число від 0 до 288 (номер останньої п'ятихвилинки в добі):

asterisk=# select  ts, extract_5m_range(ts) as five_m from queue_log_abandon order by random() limit 3;
           ts           | five_m
------------------------+--------
 2012-01-03 19:40:29+02 |    237
 2011-11-30 20:01:25+02 |    241
 2012-01-23 22:41:44+02 |    273
(3 rows)

Немає коментарів:

Дописати коментар