1

仅当时间小于 10 秒时,我才需要能够使用 sql 查找所有记录。

让我举一个小例子,这样你就可以看到我需要什么:

id     method       db_add_date
1      5            2013-09-11 00:42:12
2      6            2013-09-11 00:42:25
3      4            2013-09-11 12:02:33
4      7            2013-09-11 12:02:35
5      1            2013-09-11 12:10:54
6      2            2013-09-11 12:10:57

并输出如下:

id     method       db_add_date
3      4            2013-09-11 12:02:33
4      7            2013-09-11 12:02:35
5      1            2013-09-11 12:10:54
6      2            2013-09-11 12:10:57

因为#3 & #4 相差 2 秒 & #5 & #6 相差 3 秒

我很难将其放入 SQL 查询表单中,我将不胜感激!

4

1 回答 1

1

在 +/- 10 秒的时间戳范围内将表连接到自身,确保不要连接到自身:

select distinct t1.*
from mytable t1
join mytable t2
  on t2.db_add_date between subdate(t1.db_add_date, interval 10 second) 
    and adddate(t1.db_add_date, interval 10 second)
  and t2.id != t1.id

SQLFiddle 演示

要点:

  • 这通过加入自身来找到近行
  • 如果行仅在 10 秒内成对出现(10 秒内不超过两个),则可以省略distinct关键字
  • 如果有索引,则db_add_date由于查找时间间隔对连接行的决定性方式,这将表现良好并且可以很好地扩展
于 2013-09-11T06:06:52.050 回答