Window

LAST_VALUE

DuckDBDuckDB

Mengembalikan nilai terakhir dalam window frame. Kebalikan dari FIRST_VALUE.

Tipe hasil: Sama dengan tipe expressionDiperbarui: 6 Jan 2026

Syntax

SQL
LAST_VALUE(expression) OVER ([PARTITION BY col] ORDER BY col [frame_clause])

Parameter

expressionanywajib

Kolom atau ekspresi yang akan diambil nilai terakhirnya

PARTITION BYclauseopsional

Opsional. Membagi hasil menjadi partisi

ORDER BYclauseopsional

Menentukan urutan dalam window

frame_clauseclauseopsional

Opsional. Mendefinisikan window frame

Contoh Penggunaan

Harga Terbaru per Produk (BENAR)

SQL
1SELECT
2 product_id,
3 date,
4 price,
5 LAST_VALUE(price) OVER (
6 PARTITION BY product_id
7 ORDER BY date
8 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
9 ) as latest_price
10FROM price_history;

Mendapatkan harga terbaru dengan frame clause yang benar.

Hasil
product_iddatepricelatest_price
12024-01-01100000115000
12024-02-01120000115000
12024-03-01115000115000

Gotcha: Tanpa Frame Clause

SQL
1-- SALAH: akan return current row value
2SELECT
3 date,
4 price,
5 LAST_VALUE(price) OVER (ORDER BY date) as wrong_last
6FROM prices;
7 
8-- BENAR: dengan frame clause
9SELECT
10 date,
11 price,
12 LAST_VALUE(price) OVER (
13 ORDER BY date
14 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
15 ) as correct_last
16FROM prices;

Demonstrasi pentingnya frame clause untuk LAST_VALUE.

Target Akhir per Karyawan

SQL
1SELECT
2 employee_id,
3 review_date,
4 target,
5 LAST_VALUE(target) OVER (
6 PARTITION BY employee_id
7 ORDER BY review_date
8 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
9 ) as final_target
10FROM performance_reviews;

Menampilkan target terbaru setiap karyawan.