基于sql中另一列的条件指定列值(teradata)

vbkedwbf  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(372)

我有一个包含以下列的表: Date , AcctId , CustID , BackupID , Logins , Amount . 对于给定的日期 AcctID 可以有多个吗 CustIDs ,但我想指定一个单数 CustID 到一个 AcctID 基于 Logins .
即。:
如果 Cust1 有更多 LoginsCust2 在给定的日期和 AcctID 那么 CustID 应该有 Cust1 作为价值。
如果 Cust1 登录次数= Cust2 然后登录 CustID 应该有 BackupID 价值观。
然后我想添加 Amount 对于给定的 Date , AcctID .
有人能帮我学逻辑吗?我尝试了自我加入,但可能没有正确的想法。

ffdz8vbo

ffdz8vbo1#

可以使用聚合和窗口函数实现规则:

select acctid, date,
       (case when count(*) = 1 then min(custid)
             else min(backupid)
        end) as imputed_customer
from (select acctid, date, min(backupid) as backupid, custid,
             count(*) as cnt,
             rank() over (partition by acctid, date order by count(*) desc) as seqnum
      from t
      group by acctid, date
     ) ad
where seqnum = 1
group by acctid, date;

子查询按 acctid , date ,和 custid . 它还对给定帐户/日期组合的custid进行排序。
外部查询则表示:
如果只有一个最大值 custid ,然后使用它。
否则使用 backupid .
注意如果有多个 backupid 在给定的 acctid / date 组合,则使用任意一个。

相关问题