我使用查询
获得以下表格和数据SELECT b.*, (@rownum :=@rownum +1) AS row_number
FROM notices b, (SELECT @rownum := 0 ) row
结果:
id cate rownumber
-------------------
1 5 1
2 5 2
3 6 3
4 5 4
5 5 5
6 5 6
7 5 7
我想在不使用row_number()或其他函数的情况下输出以下结果,因为我的rdbms不支持这些。
id cate rownumber
-------------------
1 5 1
2 5 2
3 6 1
4 5 3
5 5 4
6 5 5
7 5 6
答案 0 :(得分:1)
要在MySQL中使用分区模拟ROW_NUMBER
,您可以简单地引入另一个会话变量,以便在迭代cate
中的记录时跟踪notices
组值。
SET @rn = NULL;
SET @cate = NULL;
SELECT id, cate, rn
FROM
(
SELECT
@rn:=CASE WHEN @cate = cate THEN @rn + 1 ELSE 1 END AS rn,
@cate:=cate,
id,
cate
FROM notices
ORDER BY
cate, id
) t
ORDER BY cate, rn;
在这里演示: