Eine Option ist die Verwendung eines rekursiven cte (wenn ich Ihre Anforderungen richtig verstehe):
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
Wenn Sie eine laufende Summe für jedes Symbol benötigen, das als prozentuale Änderung verwendet werden soll, können Sie einfach eine zusätzliche Spalte für diesen Betrag hinzufügen - war sich nicht ganz sicher, was Ihre Absichten waren, also dividiert das obige nur den aktuellen geschlossenen Betrag durch vorheriger abgeschlossener Betrag.