다음 테이블 구조가 있습니다.
Area Section Carrying_Engine
A1 S1 Petrol
A2 S1 Petrol
A3 S1 Diesel
A4 S1 Petrol
A5 S2 Diesel
A6 S2 Petrol
문제 설명은 섹션 S1 및 S2 아래에서 운반 된 엔진이 휘발유와 디젤, 출력이 얼마나되는지를 표시해야한다는 것입니다.
Section From_Area To_Area Carrying_Engine
S1 A1 A3 Petrol
S1 A3 A4 Diesel
S1 A4 A5 Petrol
S2 A5 A6 Diesel
추신 : 캐리 잉 엔진 또는 섹션에서 전환이있을 때마다 이전 섹션 또는 캐리 잉 엔진 계정을 고려하여 캐리 잉 비용이 추가됩니다. 예를 들어 3 번째 행에 전환이 있으므로 여기에서 A2에서 A3으로 이동합니다. , 우리는 휘발유 엔진을 사용하고 A3 지점에 디젤 엔진을 부착하여 섹션 S1에서 휘발유 엔진을 A1 구역에서 A3로 옮겼 습니다. 마찬가지로 4 ~ 5 열에서는 가솔린 엔진을 사용하여 섹션 S1에서 S2로 이동하고 A5 지점에 디젤 엔진을 부착했지만 여기에서는 S1 섹션 계정에만 운송 비용을 추가하므로 영역 A4에서 A5까지 가솔린 엔진을 사용했습니다. 섹션 S1에서.
이 문제를 해결하는 논리를 얻을 수 없습니다.
분석 기능 을 활용할 수 있지만 오라클은 레코드의 자동 순서를 제공하지 않으므로 열의 순서를 식별하기 위해 일부 열이 있어야합니다.
내가 사용하고 DATETIME
다음과 같은 솔루션의 열 순서를 식별하기 위해 열을 :
SQL> WITH YOUR_TABLE (Area, Section, Carrying_Engine, DATETIME) AS 2 (SELECT 'A1', 'S1', 'Petrol', SYSDATE - 6 FROM DUAL UNION ALL 3 SELECT 'A2', 'S1', 'Petrol', SYSDATE - 5 FROM DUAL UNION ALL 4 SELECT 'A3', 'S1', 'Diesel', SYSDATE - 4 FROM DUAL UNION ALL 5 SELECT 'A4', 'S1', 'Petrol', SYSDATE - 3 FROM DUAL UNION ALL 6 SELECT 'A5', 'S2', 'Diesel', SYSDATE - 2 FROM DUAL UNION ALL 7 SELECT 'A6', 'S2', 'Petrol', SYSDATE - 1 FROM DUAL) 8 SELECT * -- your query starts from here 9 FROM 10 ( 11 SELECT 12 SECTION, 13 AREA AS FROM_AREA, 14 LEAD(AREA) OVER(ORDER BY DATETIME ) AS TO_AREA, 15 CARRYING_ENGINE 16 FROM 17 ( 18 SELECT 19 T.*, 20 LAG(CARRYING_ENGINE) OVER(ORDER BY DATETIME) AS LEAD_CARRYING_ENGINE 21 FROM YOUR_TABLE T 22 ) 23 WHERE LEAD_CARRYING_ENGINE <> CARRYING_ENGINE 24 OR LEAD_CARRYING_ENGINE IS NULL 25 ) 26 WHERE TO_AREA IS NOT NULL; SECTION | FROM_AREA | TO_AREA | CARRYING_ENGINE ------- | --------- | ------- | --------------- S1 | A1 | A3 | Petrol S1 | A3 | A4 | Diesel S1 | A4 | A5 | Petrol S2 | A5 | A6 | Diesel
건배!!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다