Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中高效地获取上一条记录(通过索引)_Mysql_Sql_Indexing - Fatal编程技术网

在MySQL中高效地获取上一条记录(通过索引)

在MySQL中高效地获取上一条记录(通过索引),mysql,sql,indexing,Mysql,Sql,Indexing,我在'name'VARCHAR50和'ts'TIMESTAMP列上有一个复合索引 对于一个特定的记录,我想按时间查找前面的记录,如果它存在的话,它具有相同的“名称” 当使用低级非关系数据库(如D-ISAM)时,这是快速而简单的 如何在MySQL中做到这一点?这里有一种方法。查找与要查找的记录同名的所有行。然后按ts的相反顺序排序,然后选择第一个: select t.* from table t join (select * from table t where <record =

我在'name'VARCHAR50和'ts'TIMESTAMP列上有一个复合索引

对于一个特定的记录,我想按时间查找前面的记录,如果它存在的话,它具有相同的“名称”

当使用低级非关系数据库(如D-ISAM)时,这是快速而简单的


如何在MySQL中做到这一点?

这里有一种方法。查找与要查找的记录同名的所有行。然后按ts的相反顺序排序,然后选择第一个:

select t.*
from table t join
     (select * from table t where <record = your record>
     ) therec
     on t.name = therec.name and t.ts < therec.ts
order by t.ts desc
limit 1;

我能找到的所有帮助都是按照@GordonLinoff的回答

最后,我通过在每条记录中添加一个“seq”余数来解决这个问题,显示它在索引中的位置

这只是一个只附加数据的解决方案,但这是我的用例

我添加了以下值:

SET @num := 0;
UPDATE my_table
SET seq = @num := @num + 1
WHERE name = "my name"
ORDER BY ts, id

这是有效的,但很难看。它大约在上运行,而子查询方法在^2上运行,这对于超过几千行的任何内容都是不切实际的

当某物小于某物时,按某物的顺序限制1