Window

LAG

SnowflakeSnowflake

Mengakses nilai dari baris sebelumnya dalam result set berdasarkan offset tertentu. Sangat berguna untuk perbandingan dengan periode sebelumnya.

Tipe hasil: Same as expressionDiperbarui: 6 Jan 2026

Syntax

SQL
LAG(expression [, offset [, default]]) OVER ([PARTITION BY partition_expr] ORDER BY order_expr)

Parameter

expressionanywajib

Kolom atau ekspresi yang nilainya akan diambil

ORDER BYclausewajib

Menentukan urutan baris untuk perhitungan LAG

offsetINTEGERopsional

Berapa baris ke belakang (default: 1)

Default: 1

defaultanyopsional

Nilai default jika tidak ada baris sebelumnya

PARTITION BYclauseopsional

Opsional. Membagi hasil ke dalam partition terpisah

Contoh Penggunaan

Perbandingan dengan Bulan Sebelumnya

SQL
1SELECT
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
6FROM monthly_sales;

Menampilkan revenue bulan ini vs bulan sebelumnya dan selisihnya.

Hasil
MONTHREVENUEPREV_MONTH_REVENUEREVENUE_CHANGE
2024-01100000NULLNULL
2024-0212000010000020000
2024-03115000120000-5000

Persentase Perubahan (MoM)

SQL
1SELECT
2 month,
3 revenue,
4 LAG(revenue, 1, revenue) OVER (ORDER BY month) as prev_revenue,
5 ROUND((revenue - LAG(revenue, 1, revenue) OVER (ORDER BY month)) /
6 NULLIF(LAG(revenue, 1, revenue) OVER (ORDER BY month), 0) * 100, 2) as pct_change
7FROM monthly_sales;

Menghitung persentase perubahan month-over-month.

Hasil
MONTHREVENUEPREV_REVENUEPCT_CHANGE
2024-011000001000000.00
2024-0212000010000020.00
2024-03115000120000-4.17

LAG per Customer

SQL
1SELECT
2 customer_id,
3 order_date,
4 order_total,
5 LAG(order_date) OVER (
6 PARTITION BY customer_id
7 ORDER BY order_date
8 ) as prev_order_date,
9 DATEDIFF('DAY',
10 LAG(order_date) OVER (PARTITION BY customer_id ORDER BY order_date),
11 order_date
12 ) as days_between_orders
13FROM orders;

Menghitung jarak hari antar order untuk setiap customer.