MySQL 中是否有一种复制 SQL Server 功能的好方法ROW_NUMBER()?
ROW_NUMBER()
例如:
SELECT col1, col2, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow FROM Table1
然后,例如,我可以添加一个限制为 1 的条件,以获得每对intRow最高的单行。col3``(col1, col2)
intRow
col3``(col1, col2)
我想要每个 (col1, col2) 对具有最高 col3 的行。
这是一个groupwise maximum,是最常见的 SQL 问题之一(因为它看起来应该很容易,但实际上并非如此)。
我经常为 null-self-join 感到高兴:
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。如果这是一个问题,您可能需要进行一些后期处理。)