Query to generate a new column containing the value of the "previous" column
For version 5.x

SELECT id, 
       CASE WHEN @item = item
            THEN @value
            ELSE @value:=NULL
       END prev, 
       @item:=item,
       @value:=current
FROM tablename, (SELECT @item:='', @value:=0) variables
ORDER BY item, id


The query firstly processes all item1 in the order of id growth, and then processes all item2 (due to ORDER BY expression). CASE in prev's expression checks the moment when item1 finished and item2 started, and resets the variable to NULL (because first record for item have no previous record).

For version 8.x

SELECT id, 
       item, 
       current, 
       LAG(current) OVER (PARTITION BY item 
                          ORDER BY id) prev
FROM tablename


PS. Column name `#` replaced with `item`.

PPS. If you need in final sorting by `id` then wrap the query with proper ordering outer query (for 5+) or add ordering clause (for 8+).