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
)
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
)