Menggunakan MIN sebagai fungsi analitik, Anda dapat menghitung buah yang harus dipertimbangkan untuk pelanggan.
Karena urutannya bukan alfabet, Anda harus membantu dengan DECODE
Istirahat adalah grup sederhana dengan MIN
untuk tanggal pembelian, tetapi hanya mempertimbangkan pembelian dengan buah MIN.
with cust as (
select CUST_ID, PURCH_DATE, FRUIT,
decode(min(decode(FRUIT,'Apple',1,'Orange',2,'Banana',3)) over (partition by cust_id),
1,'Apple',2,'Orange',3,'Banana') as min_fruit
from tab)
select CUST_ID,min_fruit,
min(case when FRUIT = MIN_FRUIT then PURCH_DATE end) min_purch_date
from cust
group by CUST_ID,min_fruit
order by 1,2
Di bawah ini adalah solusi alternatif tanpa menggunakan fungsi analitik .
Subquery pertama menghitung buah minimal dengan silpme group by
menggunakan DECODE
yang sama logika.
Anda harus menggabungkan subquery ke tabel asli yang persis dengan apa yang dapat Anda simpan menggunakan fungsi analitis.
with min_fruit as (
select CUST_ID,
decode(min(decode(FRUIT,'Apple',1,'Orange',2,'Banana',3)),
1,'Apple',2,'Orange',3,'Banana') as min_fruit
from tab
group by cust_id)
select cust.CUST_ID,min_fruit fruit,
min(case when FRUIT = MIN_FRUIT then PURCH_DATE end) min_purch_date
from tab cust
join min_fruit on cust.cust_id = min_fruit.cust_id
group by cust.CUST_ID,min_fruit
order by 1,2;
Dengan Anda sampel data ini kembali
CUST_ID FRUIT MIN_PURCH_DATE
---------- ------ -------------------
10001 Apple 12.01.2019 00:00:00
10002 Apple 21.01.2019 00:00:00
10003 Apple 06.02.2019 00:00:00