Window

NTH_VALUE

DuckDBDuckDB

Mengambil nilai ke-n dari window frame. Generalisasi dari FIRST_VALUE dan LAST_VALUE untuk posisi arbitrary.

Tipe hasil: Sama dengan tipe inputDiperbarui: 6 Jan 2026

Syntax

SQL
NTH_VALUE(expression, n) OVER (window_specification)

Parameter

expressionanywajib

Kolom atau ekspresi yang nilainya akan diambil

nINTEGERwajib

Posisi ke-n yang diinginkan (1-based index)

Contoh Penggunaan

Mengambil Nilai Kedua Tertinggi

SQL
1SELECT
2 department,
3 employee_name,
4 salary,
5 NTH_VALUE(salary, 2) OVER (
6 PARTITION BY department
7 ORDER BY salary DESC
8 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
9 ) as second_highest_salary
10FROM employees;

Mengambil gaji tertinggi kedua di setiap departemen.

Hasil
departmentemployee_namesalarysecond_highest_salary
ITBudi2500000022000000
ITAni2200000022000000
ITEko1800000022000000

Top 3 Products per Category

SQL
1SELECT
2 category,
3 product_name,
4 sales,
5 NTH_VALUE(product_name, 1) OVER w as top1,
6 NTH_VALUE(product_name, 2) OVER w as top2,
7 NTH_VALUE(product_name, 3) OVER w as top3
8FROM product_sales
9WINDOW w AS (
10 PARTITION BY category
11 ORDER BY sales DESC
12 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
13);

Mendapatkan top 3 produk per kategori.

Hasil
categoryproduct_namesalestop1top2top3
ElectronicsLaptop5000LaptopPhoneTablet
ElectronicsPhone4500LaptopPhoneTablet

Median-like Value

SQL
1SELECT
2 department,
3 NTH_VALUE(salary, (COUNT(*) OVER w + 1) / 2) OVER w as median_salary
4FROM employees
5WINDOW w AS (
6 PARTITION BY department
7 ORDER BY salary
8 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
9);

Mengambil nilai tengah (pseudo-median) dari salary.

Hasil
departmentmedian_salary
IT20000000
Sales15000000
HR12000000