Разница во времени между записями - PullRequest
5 голосов
/ 30 ноября 2010

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

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

Спасибо, AndyDan

Ответы [ 2 ]

10 голосов
/ 30 ноября 2010

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

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

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

Чтобы увидеть минуты, используйте функцию ROUND:

SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes
  FROM YOUR_TABLE t
1 голос
/ 30 ноября 2010

Если записи имеют последовательные идентификаторы, вы можете выполнить самостоятельное объединение следующим образом:

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

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

...