2010-11-12 4 views
0

J'ai un problème avec la somme des durées en utilisant la somme.Xquery résumer partiellement les durées du jour

est un exemple ici:

<total> 
for $t in //Times 
let $start_t := $t/@start 
let $stop_t := $t/@stop 
let $duration := xs:dateTime($stop_t) - xs:dateTime($start_t) 
return 
..... 
</total> 

me donne une liste des durées partielles. Comment les résumer en utilisant la somme?

grâce

+0

Vous devez ' Accepter l'une des réponses - ceci et l'upvoting, qui vous manque encore le représentant à faire, sont les pratiques acceptées et encouragées pour exprimer la gratitude à SO. –

Répondre

0

Vous pouvez simplement envelopper toute requête dans un appel à la somme():

<total> 
{ 
    sum(
    for $t in //Times 
    let $start_t := $t/@start 
    let $stop_t := $t/@stop 
    return xs:dateTime($stop_t) - xs:dateTime($start_t) 
) 
} 
</total> 
+0

Merci beaucoup :). Ça fait l'affaire. – qba

+0

@ Oliver-Hallam: Pourquoi le PO devrait-il utiliser votre réponse et pas celle de @Alejandro? Commentez s'il vous plaît. –

+0

@Dimitre: Ma réponse illustrait le plus petit changement nécessaire au code OP pour résoudre le problème. @Alejandro a encore amélioré ceci en réécrivant le FLWOR en tant qu'expression de chemin. Je crois que ma réponse a encore de la valeur car la réécriture avec la syntaxe du chemin peut être déroutante pour un utilisateur novice de XQuery. Moi aussi, Alejandros a répondu à la question parce que c'est une solution plus propre. –

3

Vous pouvez utiliser cette expression XQuery/XPath:

sum(//Times/(xs:dateTime(@stop) - xs:dateTime(@start))) 
+0

Y at-il un moyen que je puisse retourner un résultat en tant que variable et que par exemple. afficher fn: jours-de-durée, minutes, mois ... sans répéter la requête pour chacun? – qba

+0

Ok. Cela fonctionne bien avec let. Merci pour votre aide – qba

+0

@qba: Bien sûr. Vous pouvez utiliser une [déclaration de variable] (http://www.w3.org/TR/xquery/#id-variable-declarations): '" declare "" variable "" $ "QName TypeDéclaration? ((": =" ExprSingle) | "external") ' –