select t1.order_id, t1.customer_name, t1.order_date from ( select t1.order_id, t1.order_date, t2.customer_name, row_number() over(partition by t1.customer_id order by t1.order_date desc) as rn from orders t1 left join customers t2 on t1.customer_id = t2.customer_id ) t1 where rn = 1 # order by order_id
select order_id,customer_name,order_date from (select *,row_number() over(partition by customer_id order by order_date desc) rnk from orders ) new left join customers using(customer_id) where rnk=1 order by customer_name
with t1 as( select o.*, c.customer_name, row_number() over(partition by customer_id order by order_date desc) as rn from orders o join customers c on o.customer_id=c.customer_id ) select order_id, customer_name, order_date from t1 where rn=1 order by customer_name asc # 要求使用窗口函数和表联结进行解决。 # 本份代码确实使用了这些知识点
select t1.order_id, t1.customer_name, t1.order_date from ( select t1.order_id, t1.order_date, t2.customer_name, row_number() over(partition by t1.customer_id order by t1.order_date desc) as rn from orders t1 left join customers t2 on t1.customer_id = t2.customer_id ) t1 where rn = 1 # order by order_id
select q1.order_id,q2.customer_name,q1.order_date from ( select *,row_number()over(partition by customer_id order by order_date desc) order_rank from orders ) q1 left join customers q2 on q1.customer_id=q2.customer_id where q1.order_rank=1 order by customer_name
with base as ( select o.order_id, customer_name, order_date, dense_rank() over(partition by customer_name order by order_date desc) as rk from orders o join customers c on c.customer_id = o.customer_id ) select order_id, customer_name, order_date from base where rk = 1
select order_id, customer_name, order_date from ( select order_id, customer_name, order_date, row_number() over ( partition by a.customer_id order by order_date desc ) as cnt from orders a, customers b where a.customer_id = b.customer_id ) c where cnt = 1 order by customer_name
select order_id ,customer_name ,order_date from ( select order_id ,customer_name ,order_date ,row_number() over(partition by o.customer_id order by order_date desc) as order_rk from orders o left join customers c on o.customer_id = c.customer_id ) as temp where order_rk = 1 ;
with a as (select customer_name , max(order_date) as order_date from orders o join customers c using(customer_id) group by customer_name) select order_id, customer_name, order_date from orders o join a using (order_date ) order by customer_name
WITH t1 AS( SELECT order_id, customer_name, order_date, RANK() OVER(PARTITION BY a.customer_id ORDER BY order_date DESC ) AS rk FROM orders AS a LEFT JOIN customers AS b ON a.customer_id = b.customer_id ) SELECT order_id, customer_name, order_date FROM t1 WHERE rk = 1;