Sử dụng MIN làm hàm phân tích, bạn có thể xác định loại trái cây cần được xem xét cho khách hàng.
Vì thứ tự không phải là bảng chữ cái, bạn phải trợ giúp với DECODE
Phần còn lại là một nhóm đơn giản bởi với một MIN
cho ngày thanh trừng, nhưng chỉ xem xét các giao dịch mua với trái cây 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
Bellow là một giải pháp thay thế mà không cần sử dụng các hàm phân tích .
Truy vấn con đầu tiên tính toán quả tối thiểu với nhóm silpme group by
sử dụng cùng một DECODE
logik.
Bạn phải tham gia truy vấn con vào bảng gốc, đây là chính xác những gì bạn có thể lưu bằng cách sử dụng các hàm phân tích.
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;
Với dữ liệu mẫu của bạn, điều này trả về
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