在XQuery中是否有CONNECT BY PRIOR等价物?

时间:2016-03-23 12:27:50

标签: xquery basex connect-by

我正在使用支持XQuery 3.0的BaseX。

我们假设我有一个这样的数据集,按<start>的值排序:

<element>
 <start>1</start>
 <end>2</end>
</element>
<element>
 <start>2</start>
 <end>4</end>
</element>
<element>
 <start>5</start>
 <end>6</end>
</element>

我想通过它们的结束和起始值连接这些元素,并将连接元素组合在一起:

<block>
  <start>1</start>
  <end>4</end>
</block>
<block>
  <start>5</start>
  <end>6</end>
</block>

在Oracle中,我们可以使用CONNECT BY PRIOR执行此类操作。我们怎样才能在XQuery中做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用滚动窗口实现此行为,该窗口允许您根据元素跨度的条件进行分组。滑动和翻滚窗口需要XQuery 3.0,BaseX支持。

let $items := (
  <element>
    <start>1</start>
    <end>2</end>
  </element>,
  <element>
    <start>2</start>
    <end>4</end>
  </element>,
  <element>
   <start>5</start>
   <end>6</end>
  </element>
)
for tumbling window $window in $items
  start $start when fn:true()
  only end $end next $next when not(
  $end/end eq $next/start
)
return <block>{
  $start/start,
  $end/end
}</block>