2010-11-29 13 views
2

У меня есть таблица, в которой есть (среди прочих) столбец timestamp (с именем timestamp, это стандартный тип данных DATE Oracle). Записи примерно 4-11 минут друг от друга, около 7 или 8 записей каждый час, и я пытаюсь определить, есть ли у них какой-либо шаблон.Разница во времени между записями

Есть ли простой способ увидеть каждую запись и количество минут, которые были записаны после предыдущей записи?

Спасибо, AndyDan

ответ

8

Это Oracle 9i +, используя LAG function получить предыдущее значение метки времени без необходимости самостоятельно присоединиться:

SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff 
    FROM YOUR_TABLE t 

... а потому, что целые числа представляют количество дней в результате, разница менее 24 часов будет долей. Кроме того, LAG вернет NULL, если ранее не было значения - так же, как если бы он использовал OUTER JOIN.

Чтобы увидеть минуты, используйте функцию ОКРУГЛА:

SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes 
    FROM YOUR_TABLE t 
1

Если записи имеют последовательные идентификаторы вы могли бы сделать автообъединение так:

SELECT t2.*, t2.timestamp - t1.timestamp AS timediff 
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1 

Вы, вероятно, нужно настроить это для обработки первой и последней записи, но это основа.

+0

К сожалению, нет никакого ID, последовательного или иначе. Единственный надежный способ сортировки записей - по метке времени. Спасибо хоть. – AndyDan 2010-11-29 22:22:59

+0

Даже если бы не было, нет никакой гарантии, что они всегда будут последовательными - значение временной метки может быть backdated, но значение id является самым последним. – 2010-11-29 22:29:32

Смежные вопросы