• with updatebase_cte (MachineID,RecordedDate,Pressure,ind) as (

    select s.MachineID,s.RecordedDate,s.Pressure, 0 as ind

    from yourtable s

    where s.RecordedDate='2012-10-02'

    union all

    select s.MachineID,s.RecordedDate,

    case when s.Pressure = 0 and sc.Pressure <> 0 then sc.Pressure else s.Pressure end as Pressure,

    case when s.Pressure = 0 and sc.Pressure <> 0 then 1 else 0 end as ind

    from yourtable s

    inner join updatebase_cte sc

    on (s.RecordedDate = dateadd(day,1,sc.RecordedDate) and s.MachineID=sc.MachineID)

    )

    -- this will return data need be updated part, you can use it to update by a join.

    select * from updatebase_cte where ind=1

    Just a quick coding, have not got time to test. Does this work?:-)