Ett alternativ är att använda en rekursiv cte (om jag förstår dina krav rätt):
WITH RNCTE AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date) rn
FROM quotes
),
CTE AS (
SELECT symbol, date, rn, cast(0 as decimal(10,2)) perc, closed
FROM RNCTE
WHERE rn = 1
UNION ALL
SELECT r.symbol, r.date, r.rn, cast(c.closed/r.closed as decimal(10,2)) perc, r.closed
FROM CTE c
JOIN RNCTE r on c.symbol = r.symbol AND c.rn+1 = r.rn
)
SELECT * FROM CTE
ORDER BY symbol, date
Om du behöver en löpande summa för varje symbol att använda som den procentuella förändringen är det lätt att lägga till en extra kolumn för det beloppet -- var inte helt säker på vad dina avsikter var, så ovanstående delar bara det nuvarande stängda beloppet med tidigare stängt belopp.