2015-11-21 1 views
2
select * from TABLE1 
where ENTRY_DATE >=trunc(sysdate-365) 
ORDER BY ENTRY_TIME 

Это дает мне следующий результат:Как получить разницу между двумя строками в таблице и место в новой колонке через SQL

NUMBER_ID | ENTRY_DATE | ENTRY_TIME 
----------+------------+------------ 
     1 | 11/21/2014 | 11/21/2014 08:05:00 AM 
     2 | 11/21/2014 | 11/21/2014 08:08:46 AM 
     3 | 11/21/2014 | 11/21/2014 08:09:51 AM 
     4 | 11/21/2014 | 11/21/2014 08:10:05 AM 
     5 | 11/21/2014 | 11/21/2014 08:10:05 AM 
     6 | 11/21/2014 | 11/21/2014 08:10:59 AM 
     7 | 11/21/2014 | 11/21/2014 08:14:34 AM 

Однако я хотел бы быть в состоянии отображать «Difference «через SQL, где столбец« Разница »- это разница во времени между одной записью и последней.

What I need

Может кто-нибудь помочь с добавив в этот мой SQL-код? Спасибо

+0

Какая фактическая БД вы используете? Вам нужна функция «лаг». Google это для вашей базы данных. Его очень легко реализовать. – Utsav

+0

вам следует избегать фотографий, но использовать текст для отображения данных. – miracle173

ответ

3

Вы указали несколько РСУБД. Для оракула, простой запрос будет

SELECT e_id 
     , e_d - NVL(LAG (e_d) OVER (ORDER BY e_d), e_d) diff 
     FROM events 
     ; 

предполагая базовую таблицу events созданную

CREATE TABLE events (e_id NUMBER PRIMARY KEY, e_d DATE); 

Разница будет представлена ​​в блоке «дней».

Альтернативный запрос не использует функцию LAG и - в то время как stillbeing сформулированы в синтаксисе оракула - должен быть переносимым:

SELECT e.e_id 
     , NVL (e.e_d - elagged.e_d, 0) diff 
     FROM events e 
LEFT JOIN events elagged ON (elagged.e_id = e.e_id - 1) 
    ORDER BY e.e_id 
     ; 

This sqlfiddle содержит полный пример.

+0

Пятно на! Бесконечно благодарен :) – JC59

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