【问题标题】:How to reliably count preceding rows in MySQL?如何可靠地计算 MySQL 中的前行?
【发布时间】:2017-12-12 17:28:14
【问题描述】:

我想知道如何在 MySQL 中以给定的 order by 子句计算给定行的前行数。 并且行可能是随机插入的,所以 auto_increment 是不可靠的。

我的议程 - 列表 编号从到 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

就像在这种情况下,行按“从”列排序,但显然第 34 行插入在第 36 行之前,但排序后 36 高于 34,如果插入另一行 37,它可能高于或低于任何排,甚至在顶部。那么如何才能在给定的 order by 子句中可靠地计算给定行之上的行数呢?

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

【问题讨论】:

  • 下次请不要发图片,而是发文字。这次我给你改了。

标签: mysql sql counting


【解决方案1】:

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

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

【讨论】:

  • 那么没有更快的方法了吗?
  • 没有。这怎么可能?根据一条记录,您必须找到所有以前的记录。加快此速度的唯一方法是在相关字段上建立索引(此处为 from_date 列)。
【解决方案2】:

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

ORDER BY From, ID

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

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

【讨论】:

  • 这是 SQL Server / MS Access 语法,不会返回前面的行数...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2011-09-27
相关资源
最近更新 更多