我有一个带有时间戳和类型(1 或 0)的事件表。我希望选择所有类型 0 行,其中类型 1 行的时间戳在 10(或其他)秒内。
event_id | type | timestamp
1 | 0 | 2012-1-1 00:00:00
2 | 0 | 2012-1-1 00:00:01
3 | 1 | 2012-1-1 00:00:09
4 | 1 | 2012-1-1 00:00:10
5 | 0 | 2012-1-1 00:00:14
6 | 0 | 2012-1-1 00:00:20
7 | 1 | 2012-1-1 00:00:25
8 | 0 | 2012-1-1 00:00:40
9 | 0 | 2012-1-1 00:00:50
10 | 1 | 2012-1-1 00:01:00
所以在这个例子中它将抓取第 1,2 和 6 行
如果我为每个类型 0 事件运行一个新查询,我知道该怎么做,但显然,一旦表变成数千行,速度就会非常慢。
最佳答案
正如您所建议的,对每一行执行此查询效率很低。但是,JOIN
似乎很适合您的需求:
SELECT ones.*
FROM my_table ones
JOIN my_table zeroes
ON zeroes.type = 0 AND
TIME_TO_SEC(TIMEDIFF(ones.timestamp, zeroes.timestamp)) <= 10
WHERE ones.type = 1
关于MySQL - 选择时间戳在另一行的设定时间内的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19946318/