【问题标题】:rank over partition分区排序
【发布时间】:2016-05-18 14:05:41
【问题描述】:

我总共有 3 张桌子。一个表称为CONTACTINFOCNTCT_ID 作为主索引。

第二个表是 CONTACTMAP,它将客户 (CUSTNUM) 链接到所有联系信息(详细信息,例如姓名、职位、电话号码等)。

最终表格是一个完整的客户列表,其中一列包含我们所有客户的循环列表。

我下面的代码拉回了custnum 84574 的最新条目。但我需要它拉回完整客户列表custlist 中所有custnum 的结果。

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   

【问题讨论】:

  • 我不明白。您能否展示表 #3,尤其是包含我们所有客户的循环列表的一列
  • 用table3更新,@dnoeth
  • 只需在CUSTNUM 上加入#3 并将PARTITION BY 更改为CUSTNUM 而不是CUST_TYPE(或者如果您希望每种类型有一行,请同时使用两者)
  • @dnoeth 这正是我所需要的。感谢您的帮助。如果您想将此添加为答案而不是评论,我很乐意接受。再次感谢!

标签: sql teradata window-functions


【解决方案1】:

只需在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多