Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Grupowanie danych w różne tabele na podstawie minimalnej daty zdarzenia

Używając MIN jako funkcji analitycznej, możesz obliczyć owoce, które powinny być brane pod uwagę dla klienta.

Ponieważ kolejność nie jest alfabetyczna, musisz pomóc w DECODE

Reszta to proste grupowanie według MIN za datę zakupu, ale biorąc pod uwagę tylko zakupy z owocem 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

Poniżej znajduje się alternatywne rozwiązanie bez korzystania z funkcji analitycznych .

Pierwsze podzapytanie oblicza minimalny owoc z silpme group by używając tego samego DECODE logika.

Musisz dołączyć podzapytanie do oryginalnej tabeli, co jest dokładnie tym, co możesz zapisać za pomocą funkcji analitycznych.

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;

Z twoimi przykładowymi danymi to wraca

   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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przeliterować rok podczas formatowania daty w Oracle

  2. ORA-08177:nie można zserializować dostępu dla tej transakcji

  3. Jak Oracle Rowid jest generowany wewnętrznie?

  4. Oracle używa dynamicznego sql, gdy parametrem jest nazwa tabeli

  5. Konwersja między klauzulą ​​na złączenia