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
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