MySQL中有没有一种复制SQL Server函数ROW_NUMBER()的好方法?

例如:

SELECT 
    col1, col2, 
    ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow
FROM Table1

例如,我可以添加一个条件,将intRow限制为1,以获得每(col1, col2)对中最高col3的一行.

推荐答案

我希望每对(col1,col2)都有一个最高col3的行.

这是一个groupwise maximum,是最常见的SQL问题之一(因为它看起来应该很简单,但实际上不是).

我经常 Select 空自连接:

SELECT t0.col3
FROM table AS t0
LEFT JOIN table AS t1 ON t0.col1=t1.col1 AND t0.col2=t1.col2 AND t1.col3>t0.col3
WHERE t1.col1 IS NULL;

"获取表中没有其他行与col1匹配的行,col2的col3更高."(您会注意到这一点,如果多行具有相同的col1、col2、col3,则大多数其他groupwise maximum解决方案将返回多行.如果这是一个问题,您可能需要进行一些后处理.)

Mysql相关问答推荐

S优化联接更新的最佳方式是什么?

找出同一表中列A中的每个值在列B中出现的次数

基于多行从表中 Select

MySQL-带有用户定义变量的IF-THEN语句

为什么 MAX 函数通过调用在 group 中生成正确的结果

警告:MYSQL_OPT_RECONNECT 已弃用

是否可以使用 IN 或 NOT IN 从没有关联其他表中任何行的表中返回这些名称?

如何在 axios 请求中将更新的设置状态值作为参数传递

将 Go var 传递给 MySQL - try 在 Go lang 程序 (MySQL db) 中执行 db.Exec 时出错

MySQL DISTINCT 日期仅返回特定表的 1 个值.相同的查询适用于其他表

如何在不使用子查询的情况下按最小日期计算新用户?

为什么这个查询需要超过 5 秒才能运行?

有没有更好的方法在无限滚动的网页上呈现获取的提要数据?

SQL 查找边界之间的值

无法在两个 mysql 表上执行内部联接

MySQL Workbench - 如何同步 EER 图

MySQL:如何多次加入同一张表?

用于国际和多语言目的的数据库建模

MySQL中的行值增加和减少1

在 MySQL 中的子查询上使用 GROUP_CONCAT