排名超过分区

时间:2016-02-08 19:24:24

标签: sql teradata window-functions

我总共有3张桌子。一个表称为CONTACTINFOCNTCT_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   

1 个答案:

答案 0 :(得分:0)

只需在CUSTNUM上连接表#3并将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