MySQL 分组后获取最新一条记录通常涉及到 GROUP BY
和 ORDER BY
语句的结合使用。在分组查询中,GROUP BY
用于将数据按照一个或多个列进行分组,而 ORDER BY
则用于对结果集进行排序。为了获取每个分组中的最新一条记录,我们通常需要在 ORDER BY
子句中使用时间戳或自增 ID 等能够表示记录顺序的列。
GROUP BY
后不能直接 ORDER BY
获取最新记录?GROUP BY
子句会对数据进行分组,并只保留每个分组的第一条记录(默认情况下)。因此,直接在 GROUP BY
后使用 ORDER BY
无法达到获取每个分组最新记录的目的。ROW_NUMBER()
)来解决这个问题。假设我们有一个 orders
表,包含 order_id
、user_id
、order_date
和 status
等列,我们想要获取每个用户的最新订单状态。
SELECT o1.user_id, o1.order_date, o1.status
FROM orders o1
JOIN (
SELECT user_id, MAX(order_date) AS latest_order_date
FROM orders
GROUP BY user_id
) o2 ON o1.user_id = o2.user_id AND o1.order_date = o2.latest_order_date;
WITH ranked_orders AS (
SELECT user_id, order_date, status,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date DESC) AS rn
FROM orders
)
SELECT user_id, order_date, status
FROM ranked_orders
WHERE rn = 1;
请注意,这些示例代码和参考链接仅供参考,实际使用时可能需要根据具体需求进行调整。
领取专属 10元无门槛券
手把手带您无忧上云