Window

LAST_VALUE

PostgreSQLPostgreSQL

Mengembalikan nilai terakhir dalam window frame. PENTING: Tanpa frame clause eksplisit, hanya melihat sampai baris saat ini. Gunakan UNBOUNDED FOLLOWING untuk nilai terakhir sesungguhnya.

Tipe hasil: same as input

Syntax

SQL
LAST_VALUE(expression) OVER (
  [PARTITION BY partition_expression]
  ORDER BY sort_expression
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)

Parameter

expressionanywajib

Kolom atau ekspresi yang nilainya diambil

ORDER BYexpressionwajib

Menentukan urutan dalam window

PARTITION BYexpressionopsional

Membagi data menjadi grup terpisah

Contoh Penggunaan

Harga Penutupan (Closing Price)

SQL
1SELECT
2 date,
3 stock_symbol,
4 price,
5 LAST_VALUE(price) OVER (
6 PARTITION BY stock_symbol
7 ORDER BY date
8 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
9 ) AS closing_price
10FROM stock_prices;

Mengambil harga terakhir (penutupan) untuk setiap saham.

Hasil
datestock_symbolpriceclosing_price
2024-01-01BBCA1000010500
2024-01-02BBCA1020010500
2024-01-03BBCA1050010500

Gap dari Target Akhir

SQL
1SELECT
2 month,
3 actual_sales,
4 LAST_VALUE(actual_sales) OVER (
5 ORDER BY month
6 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
7 ) AS final_sales,
8 LAST_VALUE(actual_sales) OVER (...) - actual_sales AS gap_to_final
9FROM monthly_performance;

Menghitung gap antara nilai saat ini dengan nilai akhir.

Gotcha: Tanpa Frame Clause

SQL
1-- SALAH: Akan menghasilkan nilai row saat ini
2SELECT LAST_VALUE(price) OVER (ORDER BY date) AS wrong;
3 
4-- BENAR: Gunakan frame clause
5SELECT LAST_VALUE(price) OVER (
6 ORDER BY date
7 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
8) AS correct;

Tanpa frame clause, LAST_VALUE hanya melihat sampai baris saat ini.