首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中高效地获取上一条记录(按索引)

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

Stack Overflow用户
提问于 2014-01-31 13:49:39
回答 2查看 25关注 0票数 0

我有一个复合索引(在'name‘VARCHAR(50)和'ts’时间戳列上)。

对于某一特定记录,我希望按时间使用相同的“名称”(如果存在的话)查找前面的记录。

(当使用低级别的非关系D(如DBs )时,这是快速而琐碎的。

我如何在MySQL中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-03 11:06:13

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

最后,我通过在每个记录中添加一个“seq‘’uence数字来解决这个问题,显示了它沿着索引的距离。

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

我添加了以下值:

代码语言:javascript
运行
复制
SET @num := 0;
UPDATE my_table
SET seq = @num := @num + 1
WHERE name = "my name"
ORDER BY ts, id

这起作用了,但很难看。它在大约O(n)中运行,而子查询方法是O(N^2),这对于超过几千行的任何事情都是不切实际的。

票数 0
EN

Stack Overflow用户

发布于 2014-01-31 14:33:03

这是一种方法。查找与您要查找的记录具有相同name的所有行。然后由ts按相反顺序订购,然后选择第一个顺序:

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21481675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档