ранжировать над разделом

У меня всего 3 стола. Одна таблица называется CONTACTINFO с CNTCT_ID в качестве первичного индекса.

Вторая таблица — CONTACTMAP, которая связывает клиента (CUSTNUM) со всей контактной информацией (такими данными, как имя, должность, номер телефона и т. д.).

Итоговая таблица представляет собой полный список клиентов с одним столбцом, в котором есть постоянно обновляемый список всех наших клиентов.

Мой код ниже извлекает самую последнюю запись для custnum 84574. Но мне нужно, чтобы он извлекал результаты для всех custnum в полном списке клиентов custlist.

select 
     A. CUST_TYPE
    ,A.CINSERT_DT
    ,A.CNTCT_ID

from CONTACTINFO a

JOIN  CONTACTMAP B
ON A.CNTCT_ID = B.CNTCT_ID

where       b. CUSTNUM in (‘84574’)
and         A. CUST_TYPE in (‘PAYER’)

qualify rank() over (partition by a. CUST_TYPE order by A. CINSERT_DT desc) = 1

Вот мои таблицы CONTACTINFO TABLE

CNTCT_ID    CUST_TYPE
1           PAYER
2           OWNER
3           BUYER

CONTACTMAP Table

 CNTCT_ID       CUSTNUM
1           84574
2           99457   
3           54187   

TABLE3

 CUSTNUM
84574
99457   
54187   

person CRudiger    schedule 08.02.2016    source источник
comment
Я не понимаю. Можете ли вы показать таблицу № 3, особенно один столбец, в котором есть постоянно обновляемый список всех наших клиентов?   -  person dnoeth    schedule 08.02.2016
comment
Обновлено с таблицей 3, @dnoeth   -  person CRudiger    schedule 08.02.2016
comment
Просто присоедините #3 к CUSTNUM и измените PARTITION BY на CUSTNUM вместо CUST_TYPE (или используйте оба, если вы хотите одну строку для каждого типа)   -  person dnoeth    schedule 08.02.2016
comment
@dnoeth Это было именно то, что мне было нужно. Спасибо за помощь. Если вы хотите добавить это как ответ вместо комментария, я буду рад принять его. Спасибо еще раз!   -  person CRudiger    schedule 09.02.2016


Ответы (1)


Просто присоедините таблицу № 3 к CUSTNUM и измените PARTITION BY на CUSTNUM вместо CUST_TYPE:

select 
     A. CUST_TYPE
    ,A.CINSERT_DT
    ,A.CNTCT_ID

from CONTACTINFO a

JOIN  CONTACTMAP B
ON A.CNTCT_ID = B.CNTCT_ID
JOIN custlist as c
ON b.CUSTNUM = c. CUSTNUM

--maybe remove the condition and add CUST_TYPE to PARTITION BY if you want one row per type
where A.CUST_TYPE in (‘PAYER’)

qualify
  rank()
  over (partition by c.CUSTNUM 
        order by CINSERT_DT desc) = 1
person dnoeth    schedule 09.02.2016