← Tous les exercices
Moyenne glissante sur 5 jours
Partie 3 · ★★
La fenêtre ROWS BETWEEN 4 PRECEDING AND CURRENT ROW regroupe la ligne courante et les 4 précédentes (5 lignes au maximum). Écris la requête qui renvoie ticker, date, ma5 trié par ticker, date.
Attention aux bords : au début de la série il y a moins de 5 lignes, la moyenne porte alors sur les lignes disponibles.
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 ticker, date, AVG(close) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN ___ PRECEDING AND ___) AS ma5 FROM prices ORDER BY ticker, date """ rows = con.execute(sql).fetchall()
Ctrl/⌘+Entrée