sql >> Database teknologi >  >> RDS >> Oracle

hvordan man får den 3. rapport til at kombinere kunde- og ordredata

Jeg tror ikke, du behøver at bruge unpivot . For at få den seneste dato kan du bare bruge greatest() funktion.

Denne løsning har to underforespørgsler, en til at beregne app_mon for hver ny kunde og den anden for at beregne den tidligste ordredato for alle kunder, der har afgivet en ordre inden for de seneste to år. Dette er måske ikke den mest effektive tilgang, men din første prioritet bør være at få det korrekte resultat; når du har det, kan du justere det, hvis det er nødvendigt:

with cust as 
(
    select d.dist_id as id
          , greatest(d.setup_dt, d.reinstate_dt, d.local_reinstate_dt) as app_mo 
    from mjensen_dev.gc_distributor d
    where d.setup_dt >= date '2017-01-01'
    or d.reinstate_dt >= date '2017-01-01'
    or d.local_reinstate_dt >= date '2017-01-01'
) , ord as 
(
    select o.dist_id as id
          , min(o.ord_dt) as ord_mon 
          , sum(o.oal) as ord_amt
    from gc_orders o
    where o.ord_dt >= date '2017-01-01'
    group by o.dist_id
          , trunc(o.ord_dt,'mm')
)
select cust.dist_id as id
       , cust.app_mon
       , ord.ord_mon
       , floor(months_between(ord.ord_mon, cust.app_mon ) as mon_diff
       , sum(o.oal) as ord_amt
from cust
     inner join gc_orders o on cust.id = o.dist_id
order by 1, 2
/

Du ønsker måske at justere på min beregning af mon_diff . Denne beregning behandler 2018/2/1 - 2018/1/1 som en måneds forskel. For det forekommer mig mærkeligt, at en kunde, der afgiver en ordre den dag, de tiltrådte, ville have en mon_diff på 1 i stedet for nul. Men hvis din erklæring om forretningsreglen er korrekt, skal du tilføje 1 til beregningen. Ligeledes har jeg ikke inkluderet trunc() i behandlingen af ​​datoerne, men du ønsker måske at genindsætte det.




  1. Rettelser til SQL Server 2012 &2014 Online Index Rebuild Issue

  2. Hvordan opretter og bruger man en multi-select-liste i APEX ORACLE?

  3. få adgang til mysql i vært fra gæst virtualbox

  4. et MYSQL-script til at konvertere kolonnenavnene til små bogstaver