select
t.customer_id,
t.customer_name,
t.product_name as latest_order
from
(select
o.customer_id,
c.customer_name,
p.product_name,
row_number() over(partition by o.customer_id order by o.order_date desc) as ranking
from orders o left join customers c
on o.customer_id=c.customer_id
left join products p on o.product_id=p.product_id
group by o.customer_id,c.customer_name,p.product_name,o.order_date) t
where t.ranking=1