← Tous les exercices
Corriger le rendement : PARTITION BY ticker
Partie 2 · ★
Voici la requête de l'« erreur guidée » du TP : close - LAG(close) OVER (ORDER BY date). Elle est syntaxiquement correcte mais analytiquement fausse : sans PARTITION BY, la « ligne précédente » d'un actif peut être une ligne d'un autre actif.
Complète la fenêtre pour que le rendement soit calculé séparément par actif, dans l'ordre chronologique. Le résultat doit être trié par ticker, date (colonnes : date, ticker, close, ret) ; la première ligne de chaque actif doit valoir NULL.
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 = """ SELECT date, ticker, close, close - LAG(close) OVER (PARTITION BY ___ ORDER BY ___) AS ret FROM prices ORDER BY ticker, date """ rows = con.execute(sql).fetchall()
Ctrl/⌘+Entrée