OK, it was RANK() not count()...
Code:
SQL> select * from xyz;

         X          Y
---------- ----------
        10          1
        10          1
        10          1
        20          1
        30          2
        40          2
        40          1

7 rows selected.

SQL> select x, rownum, rank() over (partition by x order by rownum ) as mov_rank
  2  from xyz;

         X     ROWNUM   MOV_RANK
---------- ---------- ----------
        10          1          1
        10          2          2
        10          3          3
        20          4          1
        30          5          1
        40          6          1
        40          7          2

7 rows selected.