Я таблица с именем SALARIES_LOG из XMLTYPE с данными, как это в каждой строке:Oracle 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>
Для каждого 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
Спасибо, теперь это решило. :) – user1969391