我有两张表格如下
表A
CallbackQueryHandler
表B
Key Field1 Created_date
1234 a Jan-18
1234 b Feb-18
1234 c Mar-18
4567 d Mar-18
6789 e Apr-18
我想在字段Key上将表A与B连接,并选择Key Posted_date
1234 Mar-18
4567 Apr-18
其中max(A.created_date)
的记录。表B有大约3亿条记录。你能帮帮我吗?
结果
A.created_date < B.posted_date
答案 0 :(得分:0)
解决这个问题的各种不同方法。这是一个解决方案,将其分解为两个明确的步骤,以便您了解原则。
子查询使用分析排名为表created_date
中与表key
中的条件匹配的每个A
记录的B
评分。外部过滤器为每个最大A
选择表created_date
中的记录。
select a.key
, a.field1
, a.created_date
from (
select a.*
, rank() over (partition by a.key
order by a.created_date desc) as rnk
from b
join a on a.key = b.key
where a.created_date < b.posted_date
) a
where a.rnk = 1
/
假设表B
有3亿条记录,那么表格A
就有更多。您必须尝试获得一个足以满足您需求的版本。例如,对于我们希望获得分区选项许可的大表;这可能会影响您如何处理连接和过滤。