2016-03-23 13 views
1

XQuery 3.0をサポートするBaseXを使用しています。XQueryにはCONNECT BY PRIORと同等の機能がありますか?

のは、私はこのようなデータセットがあるとしましょう、<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でこれをどのように行うことができますか?

+0

XQuery 3.0 [ウィンドウ句](http://docs.basex.org/wiki/XQuery_3.0#window)をご覧ください。 –

+0

@ChristianGrün、いいえ、私はしませんでした。ヒントをありがとう、私はそれを見てみましょう。 – wvdz

答えて

2

タンバリングウィンドウを使用してこの動作を実装できます。これにより、要素スパン以上の条件に基づいてグループ化できます。スライディングウィンドウとタンブリングウィンドウには、BaseXでサポートされているXQuery 3.0が必要です。

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> 
+0

これは完璧です。再度、感謝します。 – wvdz

+0

ちょっと追加しました:これは同様に機能します: '$ start/fq:end(start) –

関連する問題