Consider the following 2 tables:
Table A:
id
event_time
Table B
id
start_time
end_time
Every record in table A is mapped to exactly 1 reco
Put an index on B.start_time descending and then use this query:
SELECT A.id AS idA,
(SELECT B.id FROM B WHERE A.event_time > B.start_time LIMIT 0, 1
ORDER BY B.start_time DESC) AS idB
FROM A
As the time buckets in B are disjoint this would give you the first matching time bucket und you get rid of the between, but still having the sub-query there. Maybe including the B.id in the index would give you some additional small performance boost. (disclaimer: not sure about the MySQL syntax)