我在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值,如果该值有多个条目,我需要最后一个条目。在示例数据中,它将是:
<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 :(得分: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;