0

2 つの特定の行の違いを見つける必要がありますが、LAG/LEAD 関数をハックできず、これらの関数が役立つかどうかわかりません。

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

出力

DATETIME DEST CAABS CATT CAMINS

2009 年 9 月 7 日午後 1:00:00 OM-INT 10417 64670 87971.67
2009 年 9 月 7 日午後 1:00:00 OM-PSTN 7372 95388 13309.17
2009 年 9 月 7 日午後 1:00:00 OM-OM_20 6767 231884 184952.5
2009 年 9 月 7 日午後 1:00:00 OM-OM_225 33104 101003 68570.83
4

2 に答える 2

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')
于 2009-09-07T11:18:37.273 に答える
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'

(クエリの具体的な形はDBによって異なります)

于 2009-09-07T21:10:20.190 に答える