我有 2 个带有列的表(客户、职位、产品、sales_cycle、call_count、cntry_cd、owner_cd、cr8),我面临着一些挑战,如下所述 请帮我解决这个问题
我的要求
我有 2 个表测试表1和测试表2
我需要通过使用"test.table1"进行选择来插入"test.table2"中的值。但是我遇到了一个问题,即在将数据加载到"test.table2"时,我遇到了一些重复项
我在两个表中总共有 8 列,但在加载时我需要获取列"call_count"的最高等级,条件是这些列的唯一值(客户、职位、产品、sales_cycle)
查询我尝试过的内容
select
distinct (customer, position, product ,sales_cycle),
rank () over (order by call_count desc) rnk,
cntry_cd,
owner_cd,
cr8
from test.table1
where rnk=1
我在上面的查询中遇到了一些挑战(我使用的数据库是 RedShift)
1.我不能只对几列做区分
2.别名"rnk"在 where 子句中不被识别
请帮我解决这个问题,谢谢
不能在引入列别名的同一级别使用列别名。您需要将查询包装在派生表中。如果您使用rank()
,如图所示的distinct
也毫无用处
select customer, position, product, sales_cycle,
cntry_cd, owner_cd, cr8
from (
select customer, position, product, sales_cycle,
cntry_cd, owner_cd, cr8,
rank () over (order by call_count desc) rnk
from test.table1
) t
where rnk=1;
派生表不会增加处理时间的开销。在这种情况下,它只是语法糖允许您引用列别名。