我的DataBase上有以下表格: TimeRank(用户ID,姓名,时间)
我想按时间排序表并获取表格中特定ID的位置,例如:
第68位用户位于第3位。
我只需要执行一个返回用户位置的查询。
MySQL没有函数row_number,所以我不知道怎么做。
答案 0 :(得分:0)
SELECT x.user-id,
x.name,
x.time,
x.position
FROM (SELECT t.user-id,
t.name,
t.time,
@rownum := @rownum + 1 AS position
FROM TABLE TimeRank t
JOIN (SELECT @rownum := 0) r
ORDER BY t.time) x
WHERE x.user-id = 123
替代:
SELECT user-id,
(SELECT COUNT(*) FROM TimeRank WHERE time <= (SELECT time FROM TimeRank WHERE user-id = 123)) AS position,
time,
name
FROM TimeRank
WHERE user-id = 123
答案 1 :(得分:0)
您可以使用变量
生成位置列set @pos=0;
select pos,user_id
from (select @pos:=@pos+1 pos,user_id from TimeRank order by time) s
where user_id=68;
如果需要考虑索引,可以在表中添加一列并使用
进行更新set @pos=0;
update TimeRank set position=(@pos:=@pos+1) order by time;