Window

LAG

PostgreSQLPostgreSQL

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

Tipe hasil: same as expressionDiperbarui: 16 Mei 2026

Syntax

SQL
LAG(expression [, offset [, default]]) OVER ([PARTITION BY partition_expression] ORDER BY sort_expression)

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_monthchange
2024-01100000NULLNULL
2024-0212000010000020000
2024-03115000120000-5000

LAG dengan Default Value

SQL
1SELECT
2 date,
3 price,
4 LAG(price, 1, price) OVER (ORDER BY date) as prev_price,
5 ROUND((price - LAG(price, 1, price) OVER (ORDER BY date)) /
6 LAG(price, 1, price) OVER (ORDER BY date) * 100, 2) as pct_change
7FROM stock_prices
8WHERE symbol = 'AAPL';

Menghitung persentase perubahan harga saham. Default value mencegah division by zero di baris pertama.

LAG per Customer (PARTITION BY)

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 order_date - LAG(order_date) OVER (
10 PARTITION BY customer_id
11 ORDER BY order_date
12 ) as days_between_orders
13FROM orders;

Menghitung jarak hari antar order untuk setiap customer.

Hasil
customer_idorder_dateorder_totalprev_order_datedays_between
12024-01-1550000NULLNULL
12024-02-20750002024-01-1536
12024-03-10600002024-02-2019
22024-01-2040000NULLNULL
... 1 baris lainnya

Pertanyaan Umum tentang LAG

Apa itu fungsi LAG di PostgreSQL?
Mengakses nilai dari baris sebelumnya dalam result set berdasarkan offset tertentu. Sangat berguna untuk perbandingan dengan periode sebelumnya. Di PostgreSQL, fungsi LAG termasuk dalam kelompok fungsi yang sering digunakan untuk mengolah dan menganalisis data secara efisien.
Bagaimana cara menggunakan LAG di PostgreSQL?
Gunakan sintaks berikut: LAG(expression [, offset [, default]]) OVER ([PARTITION BY partition_expression] ORDER BY sort_expression). Pastikan argumen yang dimasukkan sudah sesuai dengan tipe data yang diharapkan.
Apa nilai yang dikembalikan oleh fungsi LAG?
Fungsi LAG mengembalikan nilai bertipe same as expression. Pastikan tipe data hasil sudah sesuai dengan kebutuhan query atau formula kamu. Jika input mengandung nilai NULL, perilaku fungsi dapat berbeda — selalu periksa dokumentasi untuk memastikan hasilnya sesuai ekspektasi.
Apa saja parameter fungsi LAG?
Fungsi ini memiliki 2 parameter wajib dan 3 parameter opsional. Parameter yang digunakan: expression (any, wajib): Kolom atau ekspresi yang nilainya akan diambil; offset (integer, opsional): Berapa baris ke belakang (default: 1); default (any, opsional): Nilai default jika tidak ada baris sebelumnya; PARTITION BY (clause, opsional): Opsional. Membagi hasil ke dalam partition terpisah; ORDER BY (clause, wajib): Menentukan urutan baris untuk perhitungan LAG.