如何可靠地计算 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);
我想知道如何计算 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);