我在解决上一个问题时遇到了另外一个问题: 所以,我有这些数据:
对于每条路线 - >我想只得到rb中存在ob的那些行。因此,这个输出:
我知道这也需要通过临时表来完成。之前我正按照@smb:
的建议这样做从table_name中选择*作为 内部联接 (从table_name中选择load,rb 按负载分组,rb)为b 在a.load = b.load上 和 a.ob = b.rb
这是不正确的,因为它没有考虑路线。
如果你们能提供帮助,那就太好了。)
由于
答案 0 :(得分:2)
已更新以添加路线 -
答案是嵌套连接。这个概念是
代码如下:
select * from table_name as a
inner join
(select route, ob, rb from table_name
group by route, ob, rb) as b
on a.ob = b.ob
and
a.lane = b.rb
and
a.route = b.route
我已经使用临时表here做了一个示例,因此您可以看到它的实际效果。
请注意,如果您的数据很大,则应考虑在连接中确保您的dist键。这可以确保redshift知道不需要在不同的计算节点之间连接任何行,因此它可以执行多个本地连接,因此效率更高。
答案 1 :(得分:1)
几种方式(声明很简单但在较大的集合上通常较慢)
select *
from table
where lane in (select rb from table)
或(我发现在较大的集合上存在得更快,但同时尝试两者)
select *
from table
where exists (select 'x' from table t_inner
where t_inner.rb = table.lane)
无论哪种方式在rb列上创建速度
的索引