2009-09-07 7 views
0

2 개의 특정 행 사이의 차이를 찾아야하지만 LAG/LEAD 기능을 해킹 할 수는 없으며 이러한 기능이 도움이되는지 확실하지 않습니다.2 개의 특정 행 사이의 차이 찾기

dest = OM-OM_225 인 행은 dest = OM-OM_20 인 행에서 빼야합니다.

Oracle 9i를 사용하십시오.

표를 사용하여 만들어집니다 : 당신이 사용할 수있는,

SELECT TRUNC(DATETIME,'HH') DATETIME,decode(OBJECT_ID,20,'OM-OM_20',225,'OM-OM_225',250,'OM-PSTN','OM-INT') DEST, 

sum(BO) as CAABS, 
SUM(BA+ RE) as CATT, 
round(SUM((AC/22)*11,2) as CAMIN 

FROM SCHEMA.TABLE 
WHERE ((OBJECT_ID = 20) or (OBJECT_ID = 225) or (OBJECT_ID = 250) or (OBJECT_ID = 150) or (OBJECT_ID =160) or (OBJECT_ID = 161) or (OBJECT_ID = 162) or (OBJECT_ID = 163) or (OBJECT_ID = 164) or (OBJECT_ID = 165) or(OBJECT_ID = 166) or (OBJECT_ID = 167)) 
and DATETIME between trunc(sysdate,'hh')-1/24 and trunc(sysdate,'hh')-1/24/3600 
group by TRUNC(DATETIME,'HH'), decode(OBJECT_ID,20,'OM-OM_20',225,'OM-OM_225',250,'OM-PSTN','OM-INT') 
order by 1 desc 

OUTPUT

 
DATETIME      DEST CAABS   CATT   CAMINS 

9/7/2009 1:00:00 PM OM-INT 10417   64670   87971.67 
9/7/2009 1:00:00 PM OM-PSTN 7372   95388   13309.17 
9/7/2009 1:00:00 PM OM-OM_20 6767    231884   184952.5 
9/7/2009 1:00:00 PM OM-OM_225  33104   101003    68570.83 

답변

0
SELECT SUM(DECODE(OBJECT_ID, 20, BO, -BO)) 
FROM mytable 
WHERE OBJECT_ID IN (20, 225) 
     AND DATETIME BETWEEN TRUNC(SYSDATE, 'HH') - 1/24 AND TRUNC(SYSDATE, 'hh') - 1/24/3600 
GROUP BY 
     TRUNC(DATETIME, 'HH') 
+0

귀하의 조언에 감사드립니다. –

0

을 같은 선택에서이 작업을 수행하려면 조인 :

select T1.some_field - coalesce(T2.some_field, 0), 
... 
from TABLE T1 
left join TABLE T2 on T2.dest = 'OM-OM_225' and T1.dest = 'OM-OM_20' 

(쿼리의 구체적인 형태는 differen 일 수 있습니다 t DB에 따라 다름)

+0

감사. 내 게시물에서 언급 한 쿼리를 기반으로 쿼리를 작성할 수있는 기회가 있습니까? –

+0

정말 고마워요. 당신은 내 큰 문제를 해결했습니다. –