在 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
排名如下: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()
.
我有未分类的时钟。我想对这些时间进行排序并将序列号插入到一个字段中。我怎样才能在程序中做到这一点?谢谢。
例如:
示例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
排名如下: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()
.