sql >> Database >  >> RDS >> Oracle

Groepering van gegevens in verschillende tabellen op basis van minimumdatum van een evenement

Met behulp van een MIN als analytische functie kun je het fruit berekenen dat in aanmerking moet komen voor een klant.

Omdat de volgorde niet alfabetisch is, moet je helpen met een DECODE

Rust is een eenvoudige groep met een MIN voor de aankoopdatum, maar alleen rekening houdend met de aankopen met het MIN-fruit.

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 is een alternatieve oplossing zonder analytische functies .

De eerste subquery berekent de minimale vrucht met een silpme group by met dezelfde DECODE logik.

U moet de subquery samenvoegen met de originele tabel, wat precies is wat u kunt opslaan met analytische functies.

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;

Met uw voorbeeldgegevens keert dit terug

   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. spark parallelle gegevens van mysql lezen

  2. PHP/MySQL - meervoudsvormen opnemen maar enkelvouden uitsluiten

  3. Strip de laatste twee tekens van een kolom in MySQL

  4. PI() Voorbeelden in SQL Server