如何可靠地计算 MySQL 中的前几行?

How to reliably count preceding rows in MySQL?

我想知道如何计算 MySQL 中给定 order by 子句中给定行的前面行数。 此外,行可能会随机插入,因此 auto_increment 不可靠。

MyAgenda - List

ID   FROM                  TO
32   2017-09-26 12:35:00   2017-09-26 13:35:00
33   2017-10-10 12:35:00   2017-10-10 13:35:00
32   2017-10-17 12:35:00   2017-10-17 13:35:00
32   2017-10-24 12:35:00   2017-10-24 13:35:00

就像在这种情况下,行按 "From" 列排序,但显然第 34 行插入到第 36 行之前,但排序后第 36 行在第 34 行之上,如果插入另一个第 37 行,则可能在任何行的上方或下方,甚至在顶部。那么,在给定的 order by 子句中,如何可靠地计算给定行上方的前行数?

试过子查询方法,复杂度O(n^2),行数大的时候会很慢

首先我建议不要只按一列排序 试试这个

ORDER BY From, ID

关于您的问题,不确定我是否理解正确,但在这种情况下,此脚本可能会有所帮助

SELECT COUNT(*)
FROM your_table
WHERE From > @From
ORDER BY From, ID

这对记录 #36 之前的记录进行计数:

select count(*)
from mytable
where from_date < (select from_date from mytable where id = 36);