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