2017-08-11 15 views
2

以下の列とサンプルデータを持つOracleテーブルDM_TEMP_SUMMING_DVC_BY_FWがあります。 データは以下の要件がfirmware_versionsのチェーン及びチェーンを介して移動デバイスの数を作成することであるOracle - 値のチェーンを作成して累積数を計算する

-dmc_id ='408' there are 2109 devices which are having firmware_version='RT1' and it is the first firmware_version because image_prerequisite is null for this firmware_image. 

    -dmc_id ='408' there are 40 devices which are having firmware_version='RT2' moved from "RT1" and so on. 

    +-----------+-------+-----------------+------------+------------------+ 
    device_count| dmc_id| firmware_version| cg_id  |image_prerequisite| 
    +-----------+-------+-----------------+------------+------------------+ 
    | 40  | 408 |RT2    |0000  |RT1    | 
    | 24  | 408 |RT3    |0000  |RT2    | 
    | 18  | 408 |RT4    |0000  |RT3    | 
    | 2109  | 408 |RT1    |0000  |null    | 
    +-----------+-------+-----------------+------------+------------------+ 

を示しています。たとえば :

Firmware_version movement is RT1-->RT2-->RT3-->RT4 
so the count of devices moved from RT1 to RT4 is (RT1+RT2+RT3+RT4) 
count of devices moved from RT2 to RT4 is (RT2+RT3+RT4) 
count of devices moved from RT3 to RT4 is (RT3+RT4) 
count of devices at last firmware_version is RT4 



+--------------------+-------+-----------------+-------+--------------------+ 
cumm_device_count | dmc_id| firmware_version| cg_id |chain    | 
+--------------------+-------+-----------------+-------+--------------------+ 
| 82(40+24+18)  | 408 |RT2    |0000 |null/RT1/RT2  | 
| 42(24+18)   | 408 |RT3    |0000 |null/RT1/RT2/RT3 | 
| 18     | 408 |RT4    |0000 |null/RT1/RT2/RT3/RT4| 
| 2191(2109+40+24+18)| 408 |RT1    |0000 |null/RT1   | 
+--------------------+-------+-----------------+-------+--------------------+ 

私はfirmware_versionとimage_prerequisiteに基づいてチェーンを生成するために、クエリの下に使用しようとしましたが、予想通り、それは結果を返すされていません。このクエリは28のレコードを返します。

SELECT dmc_id, firmware_version, charging_group_id, image_prerequisite, SYS_CONNECT_BY_PATH(firmware_version,'/') TrackingFW 
from DM_TEMP_SUMMING_DVC_BY_FW 
where FIRMWARE_VERSION in ('RT1','RT2','RT3','RT4') and dmc_id='408' and charging_group_id='0000' 
CONNECT BY NOCYCLE PRIOR firmware_version=image_prerequisite; 

この要件を解決するには、クエリまたは手順を提案してください。

ありがとうございます!

答えて

0

これを試してください。

select 
SYS_CONNECT_BY_PATH(firmware_version, '/') path_, 
firmware_version, 
device_count, 
dmc_id, 
cg_id , 
(
select sum(device_count) 
from DM_TEMP_SUMMING_DVC_BY_FW t2 
start with t1.firmware_version=t2.firmware_version CONNECT BY nocycle PRIOR firmware_version=image_prerequisite 
) sum_device 
from DM_TEMP_SUMMING_DVC_BY_FW t1 
start with image_prerequisite is null CONNECT BY nocycle PRIOR firmware_version =image_prerequisite 
+0

私は編集して動作すると思います。あなたは試みることができますか? –

+0

ありがとう!このクエリは私のために働いた:) –

+0

私はクエリが返された結果を追加しました。結果の問題を解決するのを手伝ってください。 –

関連する問題