• -- sample data

    DROP TABLE #Sample

    CREATE TABLE #Sample (UserName VARCHAR(15), [Time] CHAR(8), FieldValue TEXT)

    INSERT INTO #Sample (UserName, [Time], FieldValue)

    SELECT 'Bob Hope', '12:00:00', 'We cannot do anything until 1 O''Clock - the penguin needs defrosting'

    UNION ALL SELECT 'Rolf Harris', '13:00:00', 'We cannot do anything until 1 O''Clock - the penguin needs defrosting I have defrosted it'

    UNION ALL SELECT 'Jeff Bridges', '13:13:00', 'We cannot do anything until 1 O''Clock - the penguin needs defrosting I have defrosted it It''s Alive!'

    UNION ALL SELECT 'Jenny Bond', '13:46:25', 'We cannot do anything until 1 O''Clock - the penguin needs defrosting I have defrosted it It''s Alive! I let it go.'

    -- solution

    ;WITH SequencedData AS (

    SELECT

    UserName,

    [Time],

    FieldValue = CAST(FieldValue AS VARCHAR(MAX)),

    rn = ROW_NUMBER() OVER (ORDER BY [Time])

    FROM #Sample

    ),

    rCTE AS (

    SELECT UserName, [Time], rn,

    UserString = FieldValue,

    FieldValue = FieldValue

    FROM SequencedData

    WHERE rn = 1

    UNION ALL

    SELECT tr.UserName, tr.[Time], tr.rn,

    UserString = LTRIM(REPLACE(tr.FieldValue,lr.FieldValue,'')),

    FieldValue = tr.FieldValue

    FROM SequencedData tr

    INNER JOIN rCTE lr ON lr.rn+1 = tr.rn

    )

    SELECT UserName, [Time], UserString

    FROM rCTE

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden