Oracle
 sql >> база данни >  >> RDS >> Oracle

Групиране на данни в различни таблици въз основа на минимална дата на събитие

Използвайки MIN като аналитична функция, можете да изчислите плодовете, които трябва да бъдат взети предвид за клиент.

Тъй като редът не е азбучен, трябва да помогнете с DECODE

Rest е проста група с MIN за датата на закупуване, но като се вземат предвид само покупките с 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

По-долу е алтернативно решение без използване на аналитични функции .

Първата подзаявка изчислява минималния плод със silpme group by използвайки същия DECODE логика.

Трябва да присъедините подзаявката към оригиналната таблица, която е точно това, което можете да запазите с помощта на аналитични функции.

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;

С вашите примерни данни това се връща

   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. Това е в подробностите

  2. Как да създадете календарна таблица в Oracle

  3. Получаване на дефиниции на програмни обекти на ORACLE

  4. Грешка в адаптера на TNS протокол при стартиране на Oracle SQL*Plus

  5. проблем с Add_month в oracle, трябва да генерирам цикъл на фактуриране