【问题标题】:row_number() over(partition by col) is not working in Mysql 5.7 version [duplicate]row_number() over(partition by col) 在 Mysql 5.7 版本中不起作用 [重复]
【发布时间】: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


【解决方案1】:

您可以使用子查询根据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
)

【讨论】:

  • 非常感谢它的工作原理。
猜你喜欢
  • 2012-09-23
  • 2018-04-02
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多