row_number() over(partition by col) 在 Mysql 5.7 版本中不起作用

row_number() over(partition by col) is not working in Mysql 5.7 version

mysql8.0 row_number()如何在mysql8.0以下版本不使用session变量实现

功能?

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 中执行此操作,我会收到错误消息

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY user_id ORDER BY pkval desc) rn
FROM usertable' at line 5 0.047 sec

您可以使用子查询筛选每个 user_id 的最新 pkval

select user_name, user_id
from usertable t
where pkval = (
    select max(t1.pkval) from usertable t1 where t1.user_id = t.user_id
)