Q30📈Time Series & Analisis Tanggal★★☆☆☆Ganti tabel/kolomSafe to Run

7-Day Rolling Revenue

Dialect:bigquerypostgresqlsnowflakemysql
#rolling-avg#smoothing#window#revenue

Kapan Pakai Query Ini

Lihat tren revenue dengan smoothing mingguan. Gampang spot pola tanpa noise harian. Cocok buat weekly business review, atau pas mau detect dip yang nggak ke-cover sama daily fluctuation. Smoothing 7-hari juga otomatis netralin efek weekend vs weekday.

Yang Perlu Diganti

  • your_schema.orders → nama tabel kamu
  • order_date → kolom tanggal transaksi (DATE atau TIMESTAMP)
  • revenue → kolom nilai transaksi (numeric)

Query

SELECT
  order_date,
  revenue,
  AVG(revenue) OVER (
    ORDER BY order_date
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  ) AS rolling_7d_avg
FROM your_schema.orders
ORDER BY order_date;

Contoh Output

order_daterevenuerolling_7d_avg
2024-01-0715001320.5
2024-01-0818001410.2
2024-01-0912001378.0
2024-01-1021001525.4

Variasi

  • Ganti 629 untuk rolling 30 hari (monthly smoothing)
  • Tambah WHERE order_date >= '2024-01-01' untuk batasi range
  • Ganti AVGSUM untuk rolling cumulative total
  • Tambah PARTITION BY product_id di OVER clause untuk rolling per produk
  • Pakai RANGE BETWEEN INTERVAL '6' DAY PRECEDING AND CURRENT ROW (PostgreSQL) kalau ada gap tanggal. Bedanya: RANGE itung berdasarkan nilai tanggal, ROWS itung berdasarkan posisi row

Variasi Dialect

PostgreSQL

Sama dengan BigQuery. Window function AVG(...) OVER (...) adalah ANSI SQL standard.

Snowflake

Sama dengan BigQuery.

MySQL (8.0+)

-- MySQL 8.0+ support window functions. Untuk MySQL < 8.0, butuh self-join pattern.
SELECT
  order_date,
  revenue,
  AVG(revenue) OVER (
    ORDER BY order_date
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  ) AS rolling_7d_avg
FROM your_schema.orders
ORDER BY order_date;
7-Day Rolling Revenue — Analyst SQL Vault | NgulikSQL