Mysql分组查询每组最新的一条数据的五种实现过程 |
Mysql分组查询每组最新的一条数据代码示例: 在MySQL中,获取每个分组的最新一条数据是一个常见的查询需求 。 以下是五种实现该需求的方法: 1.使用子查询和JOIN通过子查询先找出每个分组的最新记录的日期,然后通过JOIN操作连接原表来获取完整的记录 。 SELECT o.* FROM orders o INNER JOIN ( SELECT customer_id, MAX(order_date) AS latest_date FROM orders GROUP BY customer_id ) latest_orders ON o.customer_id = latest_orders.customer_id AND o.order_date = latest_orders.latest_date; 2.使用窗口函数(MySQL 8.0+)如果你使用的是MySQL 8.0或更高版本,可以利用窗口函数 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn FROM orders ) ranked_orders WHERE rn = 1; 3.使用变量(不推荐)虽然不推荐使用变量来处理这类问题,但作为一种可能的方法,可以通过自连接和变量来实现 。 SELECT t1.* FROM orders t1 LEFT JOIN orders t2 ON t1.customer_id = t2.customer_id AND t1.order_date < t2.order_date WHERE t2.customer_id IS NULL; 4.通过聚合函数和子查询使用聚合函数 SELECT * FROM orders WHERE (customer_id, order_date) IN ( SELECT customer_id, MAX(order_date) FROM orders GROUP BY customer_id ); 5.通过DISTINCT关键字通过在子查询中使用 SELECT * FROM ( SELECT DISTINCT * FROM orders ORDER BY customer_id, order_date DESC ) AS latest GROUP BY customer_id; 以上方法中,推荐使用子查询和JOIN操作或者窗口函数,这些方法更清晰、效率更高 。 使用变量的方法虽然可行,但通常不是最佳实践 。 总结以上为个人经验,希望能给大家一个参考,也希望大家多多支持 。 |