如果只有它们之间的差异为10秒,如何获取记录

时间:2013-09-11 05:08:42

标签: mysql

我需要能够找到所有带有sql的记录,只要时间少于10秒。

让我举一个例子,你可以看到我需要的东西:

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查询表单中,我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分: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 demo

点数:

  • 通过加入自身来查找近行
  • 如果行只在10秒内成对出现(10秒内不超过两行),则可以省略distinct关键字
  • 如果索引在db_add_date上,由于查找时间间隔对连接行的确定方式,这将表现良好并且可以很好地扩展