【发布时间】:2021-03-03 02:36:31
【问题描述】:
在mysql 8.0以下版本不使用session变量的情况下如何实现mysql 8.0 row_number()函数?
SELECT user_name,user_id
FROM (SELECT user_name,
user_id,
pkval,
RANK() OVER(PARTITION BY user_id ORDER BY pkval desc) rn
FROM usertable) t
WHERE rn = 1
MySql 8.0 版本以下的等效查询。 如果我在 mysql 版本 5.7 中执行此操作,则会出现错误
错误代码:1064。您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 '(PARTITION BY user_id ORDER BY pkval desc) rn
附近使用的语法 FROM usertable' 在第 5 行 0.047 秒
【问题讨论】:
-
升级? 5.7 可以追溯到 2013 年。5.7 系列版本只是错误修复,并且有一个 TON of important stuff added with 8.0... 窗口函数、CTE、横向连接、更好的默认空值和日期处理、性能等等。由于在收购 Oracle 之前和之后的一段时间内停滞不前,即使在最初发布时,5.7 已经远远落后,它甚至不能真正成为现代数据库引擎。
标签: mysql sql subquery greatest-n-per-group mysql-5.7