Hi Joseph,
You could see how XQuery update (http://docs.basex.org/wiki/Update) performs...
 
let $src:=<c>
<a>red</a>
<a>red</a>
<a>blue</a>
<a>green</a>
<a>green</a>
</c>

return copy $result:=$src
          modify ( for $a in $result/a
                      return insert node attribute { 'n' } { 1+count($a/preceding-sibling::a[.=$a])} into $a)
         return $result

/Andy

On 27 January 2017 at 11:23, Marco Lettere <m.lettere@gmail.com> wrote:
Hi Joseph,
what about this?

let $input :=
<c>
<a>red</a>
<a>red</a>
<a>blue</a>
<a>green</a>
<a>green</a>
</c>

return
  <c>{
    for $a in $input/*
    let $t := $a/text()
    group by $t
    return
      for $a2 at $pos in $a
      return <a n="{$pos}">{$a2/text()}</a>
  }</c>

Ciao,
M.


On 27/01/2017 09:08, meumapple wrote:
Hi,

I have a structure like this:

<c>
<a>red</a>
<a>red</a>
<a>blue</a>
<a>green</a>
<a>green</a>
</c>

And I would like to get:

<c>
<a n="1">red</a>
<a n="2">red</a>
<a n="1">blue</a>
<a n="1">green</a>
<a n="2">green</a>
</c>

I have tried with two for loops after having identified the distinct-values(). This is in principle correct but it takes too long (I have many distinct values and a elements), because I cannot exit the for loop as soon as I get a match. I have been able to get the result with the window clause  and then counting the elements of the window with a nested for-loop: is there an alternative solution? Thanks.

Joseph