2009-09-07 11 views
0

J'ai besoin de trouver la différence entre 2 lignes spécifiques mais je ne peux pas pirater les fonctions LAG/LEAD et je ne sais pas si ces fonctions peuvent aider.Trouver la différence entre 2 lignes spécifiques

La ligne où dest = OM-OM_225 doit être soustraite de la ligne où dest = OM-OM_20.

Utilisation d'Oracle 9i.

table est créée à l'aide:

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 

SORTIE

 
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 

Répondre

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

Merci pour votre avis. –

0

Si vous voulez faire la même sélection, vous pouvez utiliser rejoint:

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' 

(La forme concrète de la requête peut être différente t selon DB)

+0

Merci. Avez-vous une chance de m'aider à écrire la requête en fonction de la requête que j'ai mentionnée dans mon article? –

+0

Merci beaucoup ... Vous avez résolu un gros problème à moi. –