0

各行に次のようなデータを持つ XMLTYPE の SALARIES_LOG という名前のテーブルがあります。

<pay_rise event_id="511"><employee_id>1</employee_id> ... </pay_rise>
<pay_rise event_id="512"><employee_id>2</employee_id> ... </pay_rise>
<pay_rise event_id="513"><employee_id>1</employee_id> ... </pay_rise>
<pay_rise event_id="514"><employee_id>3</employee_id> ... </pay_rise>
<pay_rise event_id="515"><employee_id>1</employee_id> ... </pay_rise>
<pay_rise event_id="516"><employee_id>2</employee_id> ... </pay_rise>

各 employee_id 値について、その値に複数のエントリがある場合は、最後の 1 つのエントリを取得する必要があります。サンプルデータでは、次のようになります。

<pay_rise event_id="515"><employee_id>1</employee_id></pay_rise>
<pay_rise event_id="516"><employee_id>2</employee_id></pay_rise>

このようなエントリは 1 つしかないため、employee_id = 3 のエントリは必要ありません。

XQuery を使用してそのような結果を得ることができますか? 私はかなり近いですが、まだ立ち往生しています:

SELECT XMLQuery(
'for $d in ora:view("SALARIES_LOG")/pay_rise,
     $e in ora:view("SALARIES_LOG")/pay_rise

    where $d/employee_id = $e/employee_id and $d/@event_id < $e/@event_id

    return 
    <pay_rise>{$e/@event_id}
      <employee_id>{$d/employee_id/text()}</employee_id>          
    </pay_rise>' 
RETURNING CONTENT) FROM dual;

それは私に与える:

<pay_rise event_id="513"><employee_id>1</employee_id></pay_rise> -> unwanted entry
<pay_rise event_id="515"><employee_id>1</employee_id></pay_rise>
<pay_rise event_id="516"><employee_id>2</employee_id></pay_rise>
<pay_rise event_id="515"><employee_id>1</employee_id></pay_rise> -> unwanted & duplicated entry
4

1 に答える 1