我有一个复合索引(在'name‘VARCHAR(50)和'ts’时间戳列上)。
对于某一特定记录,我希望按时间使用相同的“名称”(如果存在的话)查找前面的记录。
(当使用低级别的非关系D(如DBs )时,这是快速而琐碎的。
我如何在MySQL中做到这一点?
发布于 2014-02-03 11:06:13
我所能找到的所有帮助都是按照@GordonLinoff的回答。
最后,我通过在每个记录中添加一个“seq‘’uence数字来解决这个问题,显示了它沿着索引的距离。
这只是一个仅附加数据的解决方案,但这是我的用例。
我添加了以下值:
SET @num := 0;
UPDATE my_table
SET seq = @num := @num + 1
WHERE name = "my name"
ORDER BY ts, id
这起作用了,但很难看。它在大约O(n)中运行,而子查询方法是O(N^2),这对于超过几千行的任何事情都是不切实际的。
发布于 2014-01-31 14:33:03
这是一种方法。查找与您要查找的记录具有相同name
的所有行。然后由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;
https://stackoverflow.com/questions/21481675
复制相似问题