Window
DuckDB
LAST_VALUE
Mengembalikan nilai terakhir dalam window frame. Kebalikan dari FIRST_VALUE.
Tipe hasil:
Sama dengan tipe expressionDiperbarui: 6 Jan 2026Syntax
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
1 SELECT 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 10 FROM price_history;
Mendapatkan harga terbaru dengan frame clause yang benar.
Hasil
| product_id | date | price | latest_price |
|---|---|---|---|
| 1 | 2024-01-01 | 100000 | 115000 |
| 1 | 2024-02-01 | 120000 | 115000 |
| 1 | 2024-03-01 | 115000 | 115000 |
Gotcha: Tanpa Frame Clause
SQL
1 -- SALAH: akan return current row value 2 SELECT 3 date, 4 price, 5 LAST_VALUE(price) OVER (ORDER BY date) as wrong_last 6 FROM prices; 7 8 -- BENAR: dengan frame clause 9 SELECT 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 16 FROM prices;
Demonstrasi pentingnya frame clause untuk LAST_VALUE.
Target Akhir per Karyawan
SQL
1 SELECT 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 10 FROM performance_reviews;
Menampilkan target terbaru setiap karyawan.