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判斷後面。語法

相關文章
相關標籤/搜索