← Tous les exercices
Somme cumulative des rendements
Partie 3 · ★★★
Un cumul est une dépendance cumulative : tout le passé jusqu'à la ligne courante. On calcule d'abord ret dans une CTE (WITH), puis on cumule dans la requête finale. Renvoie ticker, date, cum trié par ticker, date.
Remarque : SUM ignore les NULL ; le cumul de la première ligne (rendement NULL) est donc NULL, puis il démarre au 2e jour.
import sqlite3 con = sqlite3.connect(":memory:") con.execute("CREATE TABLE prices(date TEXT, ticker TEXT, close REAL)") A = [100, 102, 101, 105, 107, 108] B = [50, 49, 51, 50, 52, 55] for i in range(6): d = f"2024-01-0{i + 1}" con.execute("INSERT INTO prices VALUES (?, ?, ?)", (d, "A", A[i])) con.execute("INSERT INTO prices VALUES (?, ?, ?)", (d, "B", B[i])) sql = """ WITH r AS ( SELECT date, ticker, close - LAG(close) OVER (PARTITION BY ticker ORDER BY date) AS ret FROM prices ) SELECT ticker, date, SUM(ret) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN ___ AND CURRENT ROW) AS cum FROM r ORDER BY ticker, date """ rows = con.execute(sql).fetchall()
Ctrl/⌘+Entrée