MySql实现Oracle的row_number()over(partition by ... order by ...)

SELECT
IF(t1.id = @id,@rownum := @rownum + 1,@rownum := 1)AS rownum,
t1.*,
@id := t1.id
FROM
(SELECT
@rownum := 0,@id := NULL) r,
test1 t1
ORDER BY t1.id,t1.starttime DESC

语法解析:

以id和starttime进行排序可以理解为id分组内starttime排序;

test1表关联@rownum :=0,@id :=null,在select中if判断@id是否等于当前行的id,因为初始为null,所以@rownum :=1,当id变化的时候,@id还是上一个id的值,此时@rownum重置为1,注意@id :=t1.id一定要放在if判断后面。

原文地址:https://www.cnblogs.com/angry-scholar/p/7597022.html