首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle XQuery -选择满足条件的最后条目

Oracle XQuery -选择满足条件的最后条目
EN

Stack Overflow用户
提问于 2013-04-10 22:31:16
回答 1查看 193关注 0票数 0

我有一个名为XMLTYPE的SALARIES_LOG表,每一行中都有这样的数据:

代码语言:javascript
复制
<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值,如果该值有多个条目,我需要为最后一个条目获取。例如,数据如下:

代码语言:javascript
复制
<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可以得到这样的结果吗?我离得很近,但仍然坚持着:

代码语言:javascript
复制
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;

这给了我:

代码语言:javascript
复制
<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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 23:00:59

您的查询分别比较每对pay_rise元素,这不是您想要的结果。试一试这个:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15937655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档