2013-04-10 38 views
0

最後一個條目我已經表命名XMLTYPE的SALARIES_LOG數據這樣的每一行中:甲骨文的XQuery - 選擇滿足條件

<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> 

對於每個僱員標識值,如果該值超過一個條目,我需要獲得最後一個條目。在示例數據將是:

<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 = 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 

回答

0

您所查詢的每對pay_rise要素分別進行比較,這是不是你想要的。試試這個:

SELECT XMLQuery(
' for $id in distinct-values(ora:view("SALARIES_LOG")/pay_rise/employee_id) 
    let $pay_rises := ora:view("SALARIES_LOG")/pay_rise[employee_id = $id] 
    where count($pay_rises) > 1 
    return $pay_rises[last()]' 
RETURNING CONTENT) FROM dual; 
+0

謝謝,現在它已經解決了。 :) – user1969391 2013-04-11 19:20:40