【发布时间】:2017-05-25 02:21:14
【问题描述】:
我需要 Sybase IQ 并且需要在一个表上构建一个树,该表包含超过一百万条记录,它链接每个 order_id。我需要找到它被现有order_id 替换的内容,直到最后。最终,我还需要找到每个 order_id 的各种数量并从中获得最大收益。
版本信息:
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');
预期输出:
- 订单编号:6473,相关订单编号:6473/6480/6481/6482,最大(数量):2000
- 订单编号:6474,相关订单编号:6474/6477/6478/6479,最大(数量):1000
- 订单编号:6475,相关订单编号:6475/6476,最大(数量):1000
- 订单 ID:6484,相关订单 ID:,最大(数量):4000
- 订单 ID:6485,相关订单 ID:,最大(数量):1000
【问题讨论】:
标签: sql recursion tree parent-child sap-iq