在 mysql 中的程序中按时间排序和编号

Sorting and numbering by time in procedure in mysql

我有未分类的时钟。我想对这些时间进行排序并将序列号插入到一个字段中。我怎样才能在程序中做到这一点?谢谢。

例如:

示例table:

id, time_, row_number
1,'07:57:01',0
2,'07:55:01',0
3,'08:01:21',0
4,'08:05:51',0
5,'08:04:11',0
6,'08:09:21',0

我想要的结果:

id, time_, row_number
1,'07:57:01',2
2,'07:55:01',1
3,'08:01:21',3
4,'08:05:51',5
5,'08:04:11',4
6,'08:09:21',6

SQLFIDDLE

排名如下:Select * from exampletable order by row_number;

id, time_, row_number
2,'07:55:01',1
1,'07:57:01',2    
3,'08:01:21',3
5,'08:04:11',4
4,'08:05:51',5
6,'08:09:21',6

如何在程序中获取此订单?谢谢。

我刚开始学习 mysql 但如果你有 mysql 8 我认为这应该有效

-- ranking by time (window function)
select 
    id,time_, rank() over (order by time_ ) 
from 
    exampletable 
order by 
     id asc; -- in ascending



id  time_   rank() over (order by time_ )
1   07:57:01    2
2   07:55:01    1
3   08:01:21    3
4   08:05:51    5
5   08:04:11    4
6   08:09:21    6

这也适用于 mariadb https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=4e345276384189d979409106b77eabee

UPDATE exampletable t1
JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY time_ ASC) row_numer
       FROM exampletable ) t2 USING (id)
SET t1.row_numer = t2.row_numer;

https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=130beaf4c22fbd7d37cfd65a4aee306f

time_ 未定义为唯一,因此它可以包含重复值,并且未定义此类数据集的输出。您可能必须将排序表达式扩展为 ORDER BY time_ ASC, id ASC 或使用 RANK()/DENSE_RANK() 而不是 ROW_NUMBER().