【问题标题】:MySQL - Select rows whose timestamp is within a set time of another rowMySQL - 选择时间戳在另一行的设定时间内的行
【发布时间】:2013-11-13 05:49:30
【问题描述】:

我有一个带有时间戳和类型(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 事件运行一个新查询,我知道该怎么做,但显然,一旦表变成数千行,这可能会非常慢。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    正如您所建议的,对每一行执行此查询效率低下。但是,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
    

    【讨论】:

      【解决方案2】:

      SQLFiddle demo

      select distinct t1.* from t as t1
      JOIN t as t2 on (t2.type=1) and 
                      (t2.timestamp between t1.timestamp
                                        AND t1.timestamp + INTERVAL 10 SECOND
                       ) 
      where t1.type=0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 2016-02-16
        • 1970-01-01
        相关资源
        最近更新 更多