通常,我有一个键(契约),它会更改为一行中的另一个键。更改后的键可以更改,为此我们有另一行。钥匙又回到了开始时的样子。我需要为第一个键(所有的键都是从这里开始的)和最新的键(即跳过介于两者之间的所有其他键)占一行。
这将创建该表:
CREATE TABLE CONTRACT ("NAME" VARCHAR2(20 BYTE)
,"OLD_CONTRACT" VARCHAR2(20 BYTE)
,"NEW_CONTRACT" VARCHAR2(20 BYTE)
,"NEW_CONTRACT_DATE" NUMBER(10)) ;
COMMIT;
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('John','1','10',20180101);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Ronnie','10','6',20180107);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Kim','6','1',20180128);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Nathaly','3','2',20180419);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Gorge','2','8',20180713);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Allen','8','20',20180921);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Tom','4','11',20170103);
COMMIT;这是它看起来的样子
Name old_key new Key Updated date
---- ------- ------- ------------
John 1 10 20180101
Ronnie 10 6 20180107
Kim 6 1 20180128
Nathaly 3 2 20180419
Gorge 2 8 20180713
Allen 8 20 20180921
Tom 4 11 20170103前3行仅返回一行。
Old Key New Key
------- -------
1 1为什么?因为
1 Becomes 10
10 Becomes 6
6 Becomes 1 接下来的3行只返回一行。
Old Key New Key
------- -------
3 20为什么?因为
3 Becomes 2
2 Becomes 8
8 Becomes 20最后一行返回一行。
Old Key New Key
------- -------
4 11为什么?因为
4 Becomes 11我需要帮助编写此方案的查询
发布于 2018-11-21 21:11:48
下面是一个使用CONNECT BY的查询,它执行您想要和需要的连接。从其结果中,您必须选择第一个old_contract和最后一个new_contract。
SELECT NAME,OLD_CONTRACT,NEW_CONTRACT, LEVEL, rownum
FROM contract
START WITH OLD_CONTRACT = 3
CONNECT BY NOCYCLE PRIOR NEW_CONTRACT = OLD_CONTRACT结果
NAME OLD_CONTRACT NEW_CONTRACT LEVEL ROWNUM
Nathaly 3 2 1 1
Gorge 2 8 2 2
Allen 8 20 3 3https://stackoverflow.com/questions/53408150
复制相似问题