У меня есть таблица протоколирования, которая содержит данные, выглядит следующим образом:Oracle - группировка между парами записей
ID MSG DATE --------------------------------------------- 1 TEst 2010-01-01 09:00:00 2 Job Start 2010-01-01 09:03:00 3 Do something 2010-01-01 09:03:10 4 Do something else 2010-01-01 09:03:12 5 Do something 2010-01-01 09:04:19 6 Job End 2010-01-01 09:06:30 7 Job Start 2010-01-01 09:18:03 8 Do something 2010-01-01 09:18:17 9 Do other thing 2010-01-01 09:19:48 10 Job End 2010-01-01 09:20:27
Он содержит (помимо всего прочего) messags написанных приложений. Я заинтересован в подготовке отчета обо всем, что написано между записью «Job Start» и записью «Job End», для всех таких пар «Job Start» и «Job End». В идеале отчет будет выглядеть следующим образом:
BATCH_NUM ID MSG DATE --------------------------------------------------------- 1 3 Do something 2010-01-01 09:03:10 1 4 Do something else 2010-01-01 09:03:12 1 5 Do something 2010-01-01 09:04:19 2 8 Do something 2010-01-01 09:18:17 2 9 Do other thing 2010-01-01 09:19:48
(разрыв строки между партиями добавлены, чтобы сделать его легче читать)
В докладе выход опускает «Работа Пуск и„Работа Конец сообщения“, а также сообщение «TEst» (которое существует вне пары «Job Start» и «Job End».
Я даже не знаю, с чего начать писать такой запрос, или если лучше пойти с PL/SQL для этого. Черт, я даже не уверен, есть ли подходящий технический термин для того, что я пытаюсь сделать;;)
(версия оракула 10g)
Возможно, было бы проще назначить уникальную ссылку на задание (например, из последовательности) и сохранить ее в таблице ведения журнала. Затем вы можете использовать группировку более эффективно. –
@ar: Да, это было бы идеально, и это сделало бы эту проблему не проблемой. К сожалению, мне не хватает контроля над всеми системами для их реализации. – FrustratedWithFormsDesigner