• here's some sample code ...I think it does what you are asking

    reference http://sqlmag.com/t-sql/last-non-null-puzzle

    CREATE TABLE #yourtable(
     ID    INT NOT NULL
    ,Shipto  INT
    ,Description VARCHAR(25)
    ,ItemN   INTEGER NOT NULL
    );
    INSERT INTO #yourtable(ID,Shipto,Description,ItemN) VALUES
    (1,17000215,'TIMES SUPER #2 KAHALA',41172),(2,NULL,NULL,41220),(3,NULL,NULL,36720),(4,NULL,NULL,40329),(5,NULL,NULL,40326),(6,NULL,NULL,41171)
    ,(7,NULL,NULL,41173),(8,NULL,NULL,40692),(9,NULL,NULL,36723),(10,NULL,NULL,40718),(11,NULL,NULL,41169),(12,NULL,NULL,40320),(13,NULL,NULL,41168)
    ,(15,17000815,'TIMES SUPER #8-BERETANIA',41220),(16,NULL,NULL,36720),(17,NULL,NULL,40326),(18,NULL,NULL,41173),(19,NULL,NULL,41212)
    ,(20,NULL,NULL,40320),(21,NULL,NULL,41168)
    ,(23,17001015,'TIMES SUPER#10-KOOLAU',41172),(24,NULL,NULL,36716),(25,NULL,NULL,36720),(26,NULL,NULL,40329),(27,NULL,NULL,41173);

    --one solution ref http://sqlmag.com/t-sql/last-non-null-puzzle
    SELECT ID,
       Shipto,
       Description,
       ItemN,
       CAST(SUBSTRING(MAX(CAST(id AS BINARY(4)) + CAST(shipto AS BINARY(4))) OVER(ORDER BY id ROWS UNBOUNDED PRECEDING), 5, 4) AS INT) AS shipto_new,
       CAST(SUBSTRING(MAX(CAST(id AS BINARY(4))+CAST(NULLIF(Description, '') AS VARBINARY(25))) OVER(ORDER BY id ROWS UNBOUNDED PRECEDING), 5, 25) AS VARCHAR(25)) AS description_new
    FROM #yourtable
    ORDER BY ID;

    DROP TABLE #yourtable

    ________________________________________________________________
    you can lead a user to data....but you cannot make them think
    and remember....every day is a school day