En mulighed er at bruge en rekursiv cte (hvis jeg forstår dine krav korrekt):
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
Hvis du har brug for en løbende total for hvert symbol, der skal bruges som den procentvise ændring, så er det nemt nok at tilføje en ekstra kolonne for det beløb -- var ikke helt sikker på, hvad dine hensigter var, så ovenstående dividerer bare det nuværende lukkede beløb med tidligere lukket beløb.