У меня есть таблица и данные, как показано ниже. В этой таблице в столбце «ВРЕМЯ» указано время, в которое вставлены данные. NODE_ENTER указывает, что узел запускается или заканчивается. Когда он равен 1, это означает, что узел запущен, а время начала - app_date и app_time. Когда NODE_ENTER равно 0, это означает, что узел завершен, и теперь app_date и app_time показывают время окончания.Как связать не последовательные данные в отсортированном списке?
Для этой таблицы я хочу получить общее время на каждом узле (для узла start, region_node, где-то и узла sub_region). Но как я могу получить это правильно?
ID TIME REFID NODE NODE_ENTER APP_DATE APP_TIME
12345 0 10150 start 1 20130605 94601
23456 3,7093E+11 10150 start 0 20130611 90115
56789 3,7093E+11 10150 region 1 20130611 90116
67891 3,72167E+11 10150 sub-region 1 20130625 162419
23432 3,72171E+11 10150 sub-region 0 20130625 173226
87656 3,72171E+11 10150 region 0 20130625 173227
34599 3,72171E+11 10150 somewhere 1 20130625 173227
87654 3,72237E+11 10150 somewhere 0 20130626 120121
66789 3,72237E+11 10150 region 1 20130626 120122
99891 3,72167E+11 10150 sub-region 1 20130627 104537
21132 3,72346E+11 10150 sub-region 0 20130627 181136
82356 3,79515E+11 10150 region 0 20130628 162656
Я использовал функцию LAG, как показано ниже, но я не мог получить разницу во времени между двумя последовательными и одинаковыми именованными строками. Например, узлы региона не являются последовательными, поскольку субрегионы должны быть между двумя узлами региона. Теперь я могу получить разницу во времени между двумя пусковыми узлами или двумя узлами субрегиона, но как я могу получить разницу во времени между двумя узлами региона? Когда я пытался использовать функцию LAG над именем узла, она не работает снова, так как я могу иметь одинаковые имена узлов. Узел Region может начинаться после того, как где-нибудь узел и конец снова.
LAG(P.NODE, 1, '-') OVER(ORDER BY P.REFID,p.time) AS PREV_NODE,
LAG(P.APP_DATE, 1, '-') OVER(ORDER BY P.REFID,p.time) AS START_DATE,
LAG(P.APP_TIME, 1, '000000') OVER(ORDER BY P.REFID, p.time) AS START_TIME
Вы правы. Мне нужно использовать раздел. Проблема решена. Спасибо большое. – engkok
Я исправил свой ответ, когда я заказывал по колонке 'DESC', который не дал бы правильного результата при использовании' LAG() '. –
Я все равно не использовал его, но еще раз спасибо :) – engkok