MySQL - 选择时间戳在另一行的设定时间内的行

标签 mysql sql database

我有一个带有时间戳和类型(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/

相关文章:

django - 如何使用中间模型批量更新 django M2M 关系?

database - 有兴趣资料库可供下载吗?

mysql |计数标签

mysql - 如何使用mysql按月查询行并按列分组?

sql - 如何管理同一记录的多个版本

mysql - 按类型返回每个月的用户数

php - Laravel - SQLSTATE [42000] : Syntax error or access violation: 1064 on migration

php - 基于对象的父=>子关系构建访问矩阵?

mysql - 从子表中选择聚合

database - 用户事件数据的理想数据存储?