Window
DuckDB
LAG
Mengakses nilai dari baris sebelumnya dalam partisi hasil. Sangat berguna untuk perbandingan dengan periode sebelumnya.
Tipe hasil:
Sama dengan tipe expressionDiperbarui: 6 Jan 2026Syntax
SQL
LAG(expression [, offset [, default]]) OVER ([PARTITION BY col] ORDER BY col)Parameter
expressionanywajib
Kolom atau ekspresi yang nilainya akan diambil dari baris sebelumnya
ORDER BYclausewajib
Menentukan urutan untuk menentukan 'sebelumnya'
offsetINTEGERopsional
Jumlah baris ke belakang (default: 1)
Default: 1
defaultsame as expressionopsional
Nilai default jika tidak ada baris sebelumnya
PARTITION BYclauseopsional
Opsional. Membagi hasil menjadi partisi
Contoh Penggunaan
Perbandingan dengan Bulan Sebelumnya
SQL
1 SELECT 2 month, 3 revenue, 4 LAG(revenue) OVER (ORDER BY month) as prev_month_revenue, 5 revenue - LAG(revenue) OVER (ORDER BY month) as revenue_change 6 FROM monthly_sales;
Membandingkan revenue dengan bulan sebelumnya.
Hasil
| month | revenue | prev_month_revenue | revenue_change |
|---|---|---|---|
| 2024-01 | 10000000 | NULL | NULL |
| 2024-02 | 12000000 | 10000000 | 2000000 |
| 2024-03 | 11000000 | 12000000 | -1000000 |
Dengan Default Value
SQL
1 SELECT 2 date, 3 price, 4 LAG(price, 1, price) OVER (ORDER BY date) as prev_price 5 FROM stock_prices;
Menggunakan harga saat ini sebagai default jika tidak ada sebelumnya.
Perbandingan 7 Hari Sebelumnya
SQL
1 SELECT 2 date, 3 daily_users, 4 LAG(daily_users, 7) OVER (ORDER BY date) as users_7_days_ago, 5 daily_users - LAG(daily_users, 7) OVER (ORDER BY date) as wow_change 6 FROM daily_metrics;
Week-over-week comparison dengan offset 7.
LAG per Kategori
SQL
1 SELECT 2 category, 3 month, 4 sales, 5 LAG(sales) OVER (PARTITION BY category ORDER BY month) as prev_sales 6 FROM category_sales;
Perbandingan per kategori dengan bulan sebelumnya.