• Here's an interim solution for you. It's horribly inefficient however, I'm working on a second more efficient version.

    DROP TABLE #ROCdata

    CREATE TABLE #ROCdata (ID INT NOT NULL, Symbol_Code VARCHAR(12), Transaction_date DATE, Close_Price MONEY)

    INSERT INTO #ROCdata (ID, Symbol_Code, Transaction_date, Close_Price)

    SELECT 1, 'Company1', '28-Apr-10', 11045.27 UNION ALL --

    SELECT 2, 'Company1', '29-Apr-10', 11167.32 UNION ALL --

    SELECT 3, 'Company1', '30-Apr-10', 11008.61 UNION ALL --

    SELECT 4, 'Company1', '3-May-10', 11151.83 UNION ALL --

    SELECT 5, 'Company1', '4-May-10', 10926.77 UNION ALL --

    SELECT 6, 'Company1', '5-May-10', 10868.12 UNION ALL --

    SELECT 7, 'Company1', '6-May-10', 10520.32 UNION ALL --

    SELECT 8, 'Company1', '7-May-10', 10380.43 UNION ALL --

    SELECT 9, 'Company1', '10-May-10', 10785.14 UNION ALL --

    SELECT 10, 'Company1', '11-May-10', 10748.26 UNION ALL --

    SELECT 11, 'Company1', '12-May-10', 10896.91 UNION ALL --

    SELECT 12, 'Company1', '13-May-10', 10782.95 UNION ALL --

    SELECT 13, 'Company1', '14-May-10', 10620.16 UNION ALL -- -3.85

    SELECT 14, 'Company1', '17-May-10', 10625.83 UNION ALL -- -4.85

    SELECT 15, 'Company1', '18-May-10', 10510.95 UNION ALL -- -4.52

    SELECT 16, 'Company1', '19-May-10', 10444.37 UNION ALL -- -6.34

    SELECT 17, 'Company1', '20-May-10', 10068.01 UNION ALL -- -7.86

    SELECT 18, 'Company1', '21-May-10', 10193.39 UNION ALL -- -6.21

    SELECT 19, 'Company1', '24-May-10', 10066.57 UNION ALL -- -4.31

    SELECT 20, 'Company1', '25-May-10', 10043.75 UNION ALL -- -3.24

    SELECT 21, 'Company2', '28-Apr-10', 110535.27 UNION ALL --

    SELECT 22, 'Company2', '29-Apr-10', 114167.32 UNION ALL --

    SELECT 23, 'Company2', '30-Apr-10', 151008.61 UNION ALL --

    SELECT 24, 'Company2', '3-May-10', 111551.83 UNION ALL --

    SELECT 25, 'Company2', '4-May-10', 10926.77 UNION ALL --

    SELECT 26, 'Company2', '5-May-10', 108568.12 UNION ALL --

    SELECT 27, 'Company2', '6-May-10', 10520.32 UNION ALL --

    SELECT 28, 'Company2', '7-May-10', 10380.43 UNION ALL --

    SELECT 29, 'Company2', '10-May-10', 10785.14 UNION ALL --

    SELECT 30, 'Company2', '11-May-10', 10748.26 UNION ALL --

    SELECT 31, 'Company2', '12-May-10', 10896.91 UNION ALL --

    SELECT 32, 'Company2', '13-May-10', 10782.95 UNION ALL --

    SELECT 33, 'Company2', '14-May-10', 106420.16 UNION ALL -- -3.72

    SELECT 34, 'Company2', '17-May-10', 10625.83 UNION ALL -- -90.69

    SELECT 35, 'Company2', '18-May-10', 10510.95 UNION ALL -- -93.04

    SELECT 36, 'Company2', '19-May-10', 10444.37 UNION ALL -- -90.64

    SELECT 37, 'Company2', '20-May-10', 10068.01 UNION ALL -- -7.86

    SELECT 38, 'Company2', '21-May-10', 10193.39 UNION ALL -- -90.61

    SELECT 39, 'Company2', '24-May-10', 10066.57 UNION ALL -- -4.31

    SELECT 40, 'Company2', '25-May-10', 10043.75 -- -3.24

    -- calculate ROC

    SELECT

    d1.ID,

    d1.Symbol_Code,

    d1.Transaction_date,

    d1.Close_Price,

    DateToCompare = DATEADD(dd,-13,d1.Transaction_date),

    d13.DateChosen,

    ROC = (d1.Close_Price-d13.Close_Price)/(1.000*d13.Close_Price) * 100

    FROM #ROCdata d1

    OUTER APPLY (

    SELECT TOP 1

    DateChosen = Transaction_date,

    Close_Price

    FROM #ROCdata

    WHERE Symbol_code = d1.Symbol_Code

    AND Transaction_date <= DATEADD(dd,-13,d1.Transaction_date)

    ORDER BY Transaction_date DESC) d13

    ORDER BY d1.Symbol_Code, d1.Transaction_date

    “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