Một tùy chọn là sử dụng cte đệ quy (nếu tôi hiểu đúng yêu cầu của bạn):
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
Nếu bạn cần tổng số tiền đang chạy cho mỗi biểu tượng để sử dụng làm tỷ lệ phần trăm thay đổi, thì đủ dễ dàng để thêm một cột bổ sung cho số tiền đó - không hoàn toàn chắc chắn về ý định của bạn, vì vậy phần trên chỉ chia số tiền đã đóng hiện tại cho số tiền đã đóng trước đó.