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

как да получите третия отчет, за да комбинирате данните за клиента и поръчката

Не мисля, че трябва да използвате unpivot . За да получите най-новата дата, можете просто да използвате greatest() функция.

Това решение има две подзаявки, едната за изчисляване на app_mon за всеки нов клиент, а другият за изчисляване на най-ранната дата на поръчка за всички клиенти, направили поръчка през последните две години. Това може да не е най-ефективният подход, но вашият първи приоритет трябва да бъде да получите правилния резултат; след като го имате, можете да го настроите, ако е необходимо:

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
/

Може да искате да промените моето изчисление на mon_diff . Това изчисление третира 2018/2/1 - 2018/1/1 като разлика от един месец. Защото ми се струва странно клиент, който направи поръчка в деня, в който се е присъединил, да има mon_diff на 1, а не на нула. Но ако изявлението ви за бизнес правилото е правилно, ще трябва да добавите 1 към изчислението. По същия начин не съм включил trunc() при обработката на датите, но може да искате да го възстановите.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създавате PDF отчети с помощта на PL/SQL

  2. Напишете изглед на Oracle DB на базата на различна разлика във времето на колоната

  3. Генериране на дати между две дати

  4. Как да се свържете към база данни на Oracle Връзка от .Net Core

  5. Поправете „Не може да се инсталира в Homebrew на ARM процесор в префикс по подразбиране на Intel (/usr/local)!“