← Tous les exercices
Compter les lignes réellement utilisées
Partie 3 · ★★
Les effets de bord font partie du sens du calcul. Pour une moyenne glissante sur 3 lignes (2 PRECEDING AND CURRENT ROW), écris une requête qui renvoie, pour l'actif A seulement (trié par date), date, ma3, n où n = COUNT(close) OVER (...) avec la même fenêtre : le nombre de prix réellement moyennés.
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, AVG(close) OVER w AS ma3, COUNT(close) OVER w AS n FROM prices WHERE ticker = 'A' WINDOW w AS (ORDER BY date ROWS BETWEEN ___ PRECEDING AND ___) ORDER BY date """ rows = con.execute(sql).fetchall()
Ctrl/⌘+Entrée