Reputation: 37
I have a table with records showing when an item is put on hold or released. Nested holds are possible. Some records have become mixed up, new logic is needed. To fix this I need to match the release to the hold - I have a roughly drawn example below - the id column doesn't exist but is what I need to generate.
The table I'm working from has no unique identifier I can use and nothing to match the release to the hold except the order they happen in. I've been playing with this for a while and can't nail it down.
The problem comes when I get 2 or more hold sin a row without a release. If we have hold1, hold2 and hold3 then the releases after this should be read in the order release3, release2, release1.
Any help or suggestions would be greatly appreciated.
CREATE TABLE "TBL_ACTIONS"
("ITEM_ID" CHAR(5 BYTE),
"ACTION_DATE" DATE,
"ACTION" VARCHAR2(40 BYTE)
);
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('19/11/16 01:00:28','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('19/11/16 01:12:45','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('19/11/16 16:00:19','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('19/11/16 16:12:40','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('20/11/16 14:52:42','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('20/11/16 16:00:10','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('24/11/16 17:52:49','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('24/11/16 21:12:40','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('24/11/16 23:12:48','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('24/11/16 23:32:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/11/16 14:40:17','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/11/16 14:40:18','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/11/16 19:12:40','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('29/11/16 08:17:59','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('29/11/16 08:17:59','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('29/11/16 08:18:40','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('29/11/16 08:18:40','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('01/12/16 11:03:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/12/16 08:10:51','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/12/16 11:27:06','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/12/16 11:27:11','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/12/16 07:10:07','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/12/16 07:10:07','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('16/12/16 14:37:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('16/12/16 14:37:40','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('22/12/16 12:20:52','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('22/12/16 12:20:52','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('22/12/16 12:29:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('22/12/16 12:29:39','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/01/17 10:23:47','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/01/17 10:23:48','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/01/17 11:52:26','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/01/17 11:52:26','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('09/01/17 13:47:52','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('09/01/17 13:47:59','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('25/01/17 09:42:35','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('25/01/17 09:42:35','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/01/17 12:11:24','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/01/17 12:11:31','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/01/17 12:12:20','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/01/17 12:12:28','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/02/17 09:01:48','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/02/17 09:01:48','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/02/17 09:02:58','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/02/17 09:02:58','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/02/17 16:57:47','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/02/17 16:57:47','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('07/02/17 16:56:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('07/02/17 16:56:47','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('07/02/17 16:57:12','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('07/02/17 16:57:21','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('08/02/17 16:41:54','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('08/02/17 16:41:54','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('08/02/17 17:21:53','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('08/02/17 17:22:04','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('09/02/17 16:38:35','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('09/02/17 16:38:43','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/02/17 07:40:05','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/02/17 07:40:13','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/02/17 23:31:52','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/02/17 23:31:52','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('11/02/17 09:16:22','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('11/02/17 09:16:23','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/02/17 16:48:13','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/02/17 16:48:13','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/02/17 16:49:16','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/02/17 16:49:17','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('21/02/17 15:42:40','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('21/02/17 17:25:08','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('21/02/17 17:25:09','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('21/02/17 17:25:18','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('21/02/17 17:25:18','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('27/02/17 16:51:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('27/02/17 16:51:39','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('27/02/17 16:51:46','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('27/02/17 16:51:46','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/02/17 14:06:59','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/02/17 14:06:59','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/02/17 14:07:10','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/02/17 14:07:10','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:04:08','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:04:08','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:04:09','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:04:09','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:23:27','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:23:27','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:23:27','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:23:27','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:55:55','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:55:55','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:55:55','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('03/03/17 10:55:55','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/03/17 13:23:25','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/03/17 13:23:25','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/03/17 13:23:26','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/03/17 13:23:26','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/03/17 15:07:20','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('06/03/17 15:10:09','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('08/03/17 15:35:45','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/03/17 12:17:36','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/03/17 12:17:37','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/03/17 13:22:47','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/03/17 13:22:55','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/03/17 13:23:20','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/03/17 13:23:27','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('18/03/17 07:12:27','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('18/03/17 07:12:28','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/03/17 16:17:54','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/03/17 17:52:44','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/03/17 18:12:49','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/03/17 23:32:45','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('01/04/17 20:32:34','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/04/17 19:53:43','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/04/17 20:52:44','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('04/04/17 21:39:18','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('04/04/17 21:45:23','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('05/04/17 20:54:49','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('05/04/17 21:00:19','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('10/04/17 17:35:13','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/04/17 11:29:33','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/04/17 21:32:44','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('18/04/17 00:40:12','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('23/04/17 09:20:35','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('23/04/17 10:52:41','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('25/04/17 20:40:50','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('25/04/17 20:52:47','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/04/17 01:13:17','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/04/17 04:32:35','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/04/17 16:12:47','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/04/17 16:20:08','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/04/17 16:40:32','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/04/17 18:20:19','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('01/05/17 03:12:06','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/05/17 16:58:17','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('17/05/17 16:58:17','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('19/05/17 15:10:28','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('19/05/17 15:10:28','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('28/05/17 21:14:06','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('30/05/17 15:41:58','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/05/17 10:05:00','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/05/17 10:05:11','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/05/17 10:05:17','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('31/05/17 10:05:27','DD/MM/YY HH24:MI:SS'),'Hold');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('02/06/17 00:30:22','DD/MM/YY HH24:MI:SS'),'Release');
Insert into TBL_ACTIONS (ITEM_ID,ACTION_DATE,ACTION) values ('ITEM1',to_date('04/06/17 06:43:33','DD/MM/YY HH24:MI:SS'),'Hold');
Upvotes: 2
Views: 89
Reputation: 2564
As per comments, I've assumed you have an ID column which can be used for ordering. I imagine there may be more efficient ways to do the following (I'd search for Last-In, First-Out or LIFO), but I wanted to see what I could come up with under my own steam:
With PushPop as (
select
nh1.Id,
nh1.Activity,
sum(case when nh2.Activity = 'Release' then -1 else 1 end) as PushPop
from
NestedHolds nh1
LEFT JOIN NestedHolds nh2 ON
nh1.Id >= nh2.Id
group by
nh1.Id,
nh1.Activity
order by
nh1.id
)
SELECT
nh.*,
NewIDs.NewID
from
NestedHolds nh
JOIN
(
SELECT
a.Id HoldId,
min(b.Id) as ReleaseId,
row_number() over (order by a.Id) NewID
FROM
PushPop a
JOIN PushPop b ON
a.Id < b.Id
AND a.PushPop = b.PushPop + 1
WHERE
a.Activity = 'Hold'
AND b.Activity = 'Release'
GROUP BY
a.Id
order by
a.Id
) NewIDs on nh.Id in (NewIDs.HoldID, NewIDs.ReleaseID)
order by nh.id
;
Upvotes: 2