• Here's a sample of it as a CTE - note the ; before it. You will need that if this is part of a procedure that does other things.

    ;

    WITH get_stddev AS

    ( SELECT a.idnumber ,

    a.marketdate ,

    STDEV(b.OHdiff) stddev_oh ,

    STDEV(b.OLdiff) stddev_ol

    FROM myTable b

    JOIN myTable a

    ON

    (

    b.IDNumber = a.IDNumber

    AND b.MarketDate < a.MarketDate

    AND b.MarketDate > a.MarketDate-31

    )

    WHERE a.MarketDate BETWEEN @lastUpdate + .1 AND @updateThrough

    AND a.IDNumber BETWEEN @minIDNumber AND @maxIDNumber

    GROUP BY a.idnumber,

    a.marketdate

    ) ----- end cte

    UPDATE c

    SET StDev_OH_30Day = stddev_oh ,

    StDev_OL_30Day = stddev_ol

    FROM mytable c

    JOIN get_stddev gs

    ON

    (

    gs.IDNumber = c.IDNumber

    AND c.marketdate = gs.marketdate )

    I urge you to test this thoroughly. I wasn't completely sure of your data set-up. It's possible this needs some changes for your tables.