常见报错与改写
常见报错与改写
-- 错误:窗口函数不能出现在 WHERE
SELECT * FROM (
SELECT o.*, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at) AS rn
FROM orders o
) x
WHERE rn = 1; -- 正确:外层过滤
-- 错误示例(不要这样写):
-- SELECT * FROM orders WHERE ROW_NUMBER() OVER (...) = 1;| 允许位置 | SELECT 列表、ORDER BY |
|---|---|
| 禁止位置 | WHERE / GROUP BY / HAVING |
| MySQL 8 附加限制 | 窗口函数不能用于 UPDATE/DELETE 的 SET 子句 |