Как я могу агрегировать количество секунд в результате запроса?

У меня есть таблица Oracle 10g, содержащая # записей журнала. Эта таблица собирает данные с устройства записи окружающей среды, которое во время работы создает запись в журнале каждые 15 секунд.

Я хочу сложить вместе все секунды из дат чтения записей в файле журнала, чтобы гарантировать, что регистратор работал > 24 часа (84 600 секунд). Данные выглядят так:

ID     READING_DATE 
286294 8/4/2010 1:03:30 PM 
286295 8/4/2010 1:03:45 PM 
286296 8/4/2010 1:04:00 PM 
286297 8/4/2010 1:04:15 PM 
286298 8/4/2010 1:04:30 PM 
286299 8/4/2010 1:04:45 PM 
286300 8/4/2010 1:05:00 PM 

Я не могу просто запросить (дата окончания — дата начала), потому что устройство может не работать 24 часа подряд. Он может работать в общей сложности 24 часа в течение 90 дней.

Что я хочу сделать, так это написать запрос, который будет выполняться базой данных, который добавляет каждый 15-секундный интервал к последнему, чтобы увидеть, есть ли у меня результат, превышающий> 84600.

Любые/все ответы приветствуются! Заранее спасибо,


person Griff    schedule 12.08.2010    source источник
comment
Нет необходимости подписывать, так как каждый Q подписывается автоматически. Также не нужно повторять теги в заголовке вопроса, поскольку теги всегда видны. Хотя вопрос отличный.   -  person Paul Sasik    schedule 12.08.2010


Ответы (2)


Количество секунд, в течение которых устройство работало, составляет примерно:

SELECT COUNT(*) * 15
FROM your_table
person Mark Byers    schedule 12.08.2010
comment
К сожалению, существует ряд различных устройств, которые собирают данные такого типа, и все они осуществляют выборку с разной периодичностью. У меня нет никаких предварительных знаний о частоте дискретизации для каждого типа устройства. - person Griff; 12.08.2010
comment
@Griff: Вероятно, вы могли бы догадаться о частоте дискретизации, посмотрев на первые две строки и рассчитав разницу. В некоторых случаях это может дать неправильный результат, поэтому будьте осторожны. Другой вариант — найти минимальную разницу между двумя последовательными строками и использовать ее в качестве частоты дискретизации. - person Mark Byers; 12.08.2010
comment
Я думаю, это то, что я должен сделать. Надеюсь, частота дискретизации не изменится для запуска. - person Griff; 12.08.2010

Предположим, что у вас есть несколько устройств, зарегистрированных в этой таблице, и вы хотите перечислить все устройства, которые работали в течение> 1 дня.

SELECT device_id
FROM log_table
GROUP BY device_id
HAVING MAX(reading_date) - MIN(reading_date) > 1.0
person Scott Bailey    schedule 12.08.2010