(: Duration: For each employee, show the longest period during which he/she went with no change in salary and his/her salary during that time. :) declare function local:difference($e,$s, $salary) { let $n := (xs:date($e) - xs:date($s)) return element difference{element days{xs:integer(fn:replace(xs:string($n),"P|D",""))},element end{ xs:date($e)},element start{ xs:date($s)}, $salary} }; declare function local:init() { for $r in doc("v-emps.xml")/employees/employee return (element emp{element diff{ (for $d in $r/salary order by local:difference($d/@tend, $d/@tstart, $d) ascending return (local:difference($d/@tend, $d/@tstart, $d), $r/empno))}}) }; declare function local:final_call() { let $diff := local:init() for $d in $diff/diff return (element entry{$d/difference[days=max($d/difference/days)]/days,$d/difference[days=max($d/difference/days)]/salary, $d/empno[1]}) }; let $final := local:final_call() return element all_entries{$final}