Можете да използвате корелирана подзаявка, за да намерите най-новия disp_order
за предишното ниво:
Настройка на схема на Oracle 11g R2 :
CREATE TABLE tbl_pattern ( order_no, code, disp_order, lvl, description ) ASSELECT 'RM001-01', 1, 0, 1, 'HK140904-1A' FROM DUAL UNION ALLSELECT 'RM001-01', 1, 1, 2, „HK140904-1B“ ОТ DUAL UNION ALLSELECT „RM001-01“, 1, 2, 3, „HK140904-1B“ ОТ DUAL UNION ALLSELECT „RM001-01“, 1, 3, 4, „HK140904-1C“ ' ОТ DUAL UNION ALLSELECT 'RM001-01', 1, 4, 5, 'HK140904-1D' ОТ DUAL UNION ALLSELECT 'RM001-01', 1, 5, 2, 'HK140904-1E' ОТ DUAL UNION ALLSELECT 'RM001- 01', 1, 6, 3, 'HK140904-1E' ОТ DUAL UNION ALLSELECT 'RM001-01', 1, 7, 3, 'HK140904-1X' ОТ DUAL UNION ALLSELECT 'RM001-01', 1, 8, 4 , 'HK140904-1E' ОТ DUAL UNION ALLSELECT 'RM001-01', 1, 9, 5, 'HK140904-1E' ОТ DUAL;
Заявка 1 :
SELECT t.*, (SELECT MAX( disp_order) FROM tbl_pattern p WHERE p.order_no =t.order_no AND p.code =t.code AND p.lvl =t.lvl - 1 AND p.disp_order
<предварителен код>| ПОРЪЧКА_NO | КОД | DISP_ORDER | LVL | ОПИСАНИЕ | РОДИТЕЛ ||----------|------|------------|-----|---------- ---|--------|| RM001-01 | 1 | 0 | 1 | HK140904-1A | (нула) || RM001-01 | 1 | 1 | 2 | HK140904-1B | 0 || RM001-01 | 1 | 2 | 3 | HK140904-1B | 1 || RM001-01 | 1 | 3 | 4 | HK140904-1C | 2 || RM001-01 | 1 | 4 | 5 | HK140904-1D | 3 || RM001-01 | 1 | 5 | 2 | HK140904-1E | 0 || RM001-01 | 1 | 6 | 3 | HK140904-1E | 5 || RM001-01 | 1 | 7 | 3 | HK140904-1X | 5 || RM001-01 | 1 | 8 | 4 | HK140904-1E | 7 || RM001-01 | 1 | 9 | 5 | HK140904-1E | 8 |