我有一个简单的任务,在“customer”(父表)和“order”表(子表)之间进行联接,子表的联接行具有最新(max)order date值。如果impala像任何sql引擎一样,您可以编写:
select * from customer c
join `order` o on o.customer_id=c.id
and o.id=(
select o2.id
from `order` o2
where o2.customer_id=c.id
order by o2.order_date
desc limit 1
);
显然, Impala 是不同的,因为我只是得到以下错误:
Error while compiling statement: FAILED: ParseException line 4:1 cannot recognize input near 'select' 'o2' '.' in expression specification
我试图在子查询之间用where替换and,但是没有用。
1条答案
按热度按时间zzlelutf1#
你应该可以用一个
join
以及aggregation
在from
条款:这假设最大订单日期只有一个订单。如果这是不合理的,那么也许你可以使用
max(id)
而不是max(order_date)
. 如果ID是按顺序分配的,那么这将满足您的需要。你也许可以用它做你想做的事
exists
: