如何比较同一节点上的属性xQuery

如何比较同一节点上的属性xQuery,xquery,Xquery,我在尝试比较和计算同一节点的属性时遇到了一个问题,例如,我需要筛选在同一天内进行过多次手术的医生。我的示例xml如下所示: <ops> <med_operation pac="p1" doctor="David" date="2017-01-01" /> <med_operation pac="p2" doctor="David" date="2017-01-01" /> <med_operation pac="p3" doctor="Ana

我在尝试比较和计算同一节点的属性时遇到了一个问题,例如,我需要筛选在同一天内进行过多次手术的医生。我的示例xml如下所示:

<ops>
  <med_operation pac="p1" doctor="David" date="2017-01-01" />
  <med_operation pac="p2" doctor="David" date="2017-01-01" />
  <med_operation pac="p3" doctor="Ana" date="2017-01-02" />
</ops>

提前感谢并为我的英语感到抱歉

有多种方法可以解决这个问题,但一个简单的解决方案是循环医生姓名的不同值,然后循环该医生日期的不同值,计算匹配的值并按顺序存储,最后,使用
将结果集约束为仅限于序列中的值大于1的医生

for $doc in distinct-values(//med_operation/@doctor)
let $date-counts :=
  for $date in distinct-values(//med_operation[@doctor = $doc]/@date)
  return count(//med_operation[@doctor = $doc][@date= $date])
where ($date-counts[. gt 1])
return $doc

有多种方法可以解决这个问题,但一个简单的解决方案是循环医生姓名的不同值,然后循环该医生日期的不同值,计算匹配的值并按顺序存储,最后,使用
将结果集约束为仅限于序列中的值大于1的医生

for $doc in distinct-values(//med_operation/@doctor)
let $date-counts :=
  for $date in distinct-values(//med_operation[@doctor = $doc]/@date)
  return count(//med_operation[@doctor = $doc][@date= $date])
where ($date-counts[. gt 1])
return $doc
在XQuery 3.0中,使用:

for $o in //med_operation
group by $doc := $o/@doctor, $date := $o/@date
where count($o) gt 1
return $doc
在XQuery 3.0中,使用:

for $o in //med_operation
group by $doc := $o/@doctor, $date := $o/@date
where count($o) gt 1
return $doc

这是XQuery 1.0还是3.0/3.1?XQuery3.0引入了一个“groupby”操作符,使这类操作变得更加简单。我试过几种方法,但我还是从XQuery开始,这是XQuery 1.0还是3.0/3.1?XQuery3.0引入了一个“groupby”操作符,使这类操作变得更加简单。我已经尝试了很多方法,但是我还是从XQueryTanks开始使用这个选项,同时也感谢这个选项