Мне нужен Sybase IQ и нужно построить дерево на столе, которое содержит более миллиона записей, которые ссылаются на каждые order_id
. Мне нужно найти то, что было заменено существующим order_id
до конца. В конце концов, мне также нужно найти различные количества каждого из этих order_id
и получить максимум от него.Sybase IQ SQL Рекурсивный цикл для построения дерева
Version Info:
select @@version
SAP IQ/16.0.110.2014/10214/P/sp11/Enterprise Linux64 - x86_64 - 2.6.18-194.el5/64bit/2015-11-21 01:29:07
Таблица DDL
create table #tmporder
(
account_key varchar(50) not null,
order_id varchar(50) not null,
msg_type varchar(5) not null,
repl_by_order varchar(50) not null,
replaces_order varchar(50) not null,
quantity numeric(12) not null,
order_datetime datetime not null,
order_status varchar(1) not null
);
Образец данных:
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6473','PL','0','0',1000,{ts '2016-10-07 07:59:10'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6473','MO','6480','0',1000,{ts '2016-10-07 07:59:10'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6474','PL','0','0',1000,{ts '2016-10-07 08:16:05'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6474','MO','6477','0',1000,{ts '2016-10-07 08:16:05'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6475','PL','0','0',1000,{ts '2016-10-07 08:16:18'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6475','MO','6476','0',1000,{ts '2016-10-07 08:16:18'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6476','MO','0','6475',1000,{ts '2016-10-07 08:18:59'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6477','MO','0','6474',1000,{ts '2016-10-07 08:19:39'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6477','MO','6478','6474',1000,{ts '2016-10-07 08:19:39'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6478','MO','6479','6477',1000,{ts '2016-10-07 08:25:42'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6478','MO','0','6477',1000,{ts '2016-10-07 08:25:42'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6479','MO','0','6478',1000,{ts '2016-10-07 08:29:00'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6480','MO','6481','6473',2000,{ts '2016-10-07 08:33:57'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6480','MO','0','6473',2000,{ts '2016-10-07 08:33:57'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6481','MO','0','6480',2000,{ts '2016-10-07 08:35:40'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6481','MO','6482','6480',2000,{ts '2016-10-07 08:35:40'},'5');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6482','MO','0','6481',2000,{ts '2016-10-07 08:36:40'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6484','PL','0','0',4000,{ts '2016-10-07 08:45:42'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6485','PL','0','0',1000,{ts '2016-10-07 08:46:30'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6486','PL','0','0',1000,{ts '2016-10-07 09:10:19'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6495','PL','0','0',1000,{ts '2016-10-07 17:54:10'},'1');
INSERT INTO #tmporder (account_key,order_id,msg_type,repl_by_order,replaces_order,quantity,order_datetime,order_status)
VALUES ('123456','6496','PL','0','0','500',{ts '2016-10-07 18:05:24.0'},'1');
Ожидаемый результат:
- Заказать ID: 6473, относящиеся Заказы ID: 6473/6480/6481/6482, Макс (кол-во): 2000
- Заказать ID: 6474, родственного Приказы ID: 6474/6477/6478/6479, Макс. (Кол-во): 1000
- Идентификационный номер заказа: 6475, Соответствующие заказы ID: 6475/6476, Макс. Кол-во: 1000
- Идентификационный номер заказа: 6484, Соответствующие заказы ID:, Макс Кол-во: 4000
- Идентификационный номер заказа: 6485, Соответствующие заказы ID:, Макс. Кол-во: 1000