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排序

语法解析:test

以id和starttime进行排序能够理解为id分组内starttime排序;select

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

相关文章
相关标签/搜索