2016-04-03 6 views
1

Ich habe ein XML-Dokument, das wie folgt aussieht:Xquery - Ermitteln des Mindestattributs pro Gruppe.

<charities> 
    <charity char_id="x211x"> 
     <donor type="other" amount="300" /> 
     <donor type="corporation" amount="250" /> 
     <donor type="individual" amount="50" /> 
    </charity> 
    <charity char_id="x202x"> 
     <donor type"other" amount="25" /> 
     <donor type="individual" amount="25" /> 
     <donor type="corporation" amount="500" /> 
    </charity> 
</charities> 

Ich mag xquery zu verwenden, um die Lage sein, die Mindestspende für jeden wohltätigen Zweck zurückzukehren, mit jener Liebe, der ID und die Menge, die gespendet wurde. Wo gibt es Verbindungen für Mindest, sind beide

berichtet

So wäre das Ergebnis, in diesem Fall wie folgt aussehen:

<minDonors> 
    <charity char_id="x211x"> 
     <donation amount="50">individual</donation> 
    </charity> 
    <charity char_id="x202x"> 
     <donation amount="25">other</donation> 
     <donation amount="25">individual</donation> 
    </charity> 
</minDonors> 

Bisher konnte ich nur mit einem Durcheinander der Verwendung der Min.-Funktion erhalten, indem aber ich einfach am Ende den Wert mit sich selbst vergleichen.

Antwort

1

Mit min(...):

<minDonors>{ 
    for $charity in //charity 
    let $min-donation := min($charity/donor/@amount/number()) 
    return <charity>{ 
    $charity/@char_id, 
    for $donor in $charity/donor[@amount = $min-donation] 
    return <donation amount="{$donor/@amount}">{ 
     $donor/@type/string() 
    }</donation> 
    }</charity> 
}</minDonors> 

XQuery Mit 3 count zusammen mit order by (wahrscheinlich weniger effizient):

<minDonors>{ 
    for $charity in //charity 
    return <charity>{ 
    $charity/@char_id, 
    for $donor in $charity/donor 
    group by $amount := $donor/@amount 
    order by xs:double($amount) 
    count $c 
    where $c = 1 
    for $donation in $donor 
    return <donation amount="{$amount}">{ 
     $donation/@type/string() 
    }</donation> 
    }</charity> 
}</minDonors> 
Verwandte Themen