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

时间:2017-07-08 14:37:38

标签: mysql sql counting

我想知道如何在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,则它可以在任何行的上方或下方,或者甚至在顶部。那么,如何按给定的顺序依次计算给定行上方的前一行数?

尝试使用子查询方法,但它是O(n ^ 2),当行数很大时会非常缓慢。

2 个答案:

答案 0 :(得分:0)

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

ORDER BY From, ID

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

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

答案 1 :(得分:0)

这会在记录#36之前计算记录:

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