Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql查询-如何避免;事实上";根据时间重复记录_Mysql_Sql - Fatal编程技术网

Mysql sql查询-如何避免;事实上";根据时间重复记录

Mysql sql查询-如何避免;事实上";根据时间重复记录,mysql,sql,Mysql,Sql,如何执行sql查询以返回表中的所有记录,但与另一条记录相差不到2秒的记录除外 示例-考虑这5个记录: 16:24:00 16:24:10 16:24:11 16:24:12 16:24:30 查询应返回: 16:24:00 16:24:10 16:24:30 非常感谢您提供的任何帮助最佳解决方案-对时间戳进行编号和排序,仅在连续记录上3秒或更长时间内自动加入: select a.* from ( select timestamp, @curRow := @curRow +

如何执行sql查询以返回表中的所有记录,但与另一条记录相差不到2秒的记录除外

示例-考虑这5个记录:

16:24:00
16:24:10
16:24:11
16:24:12
16:24:30
查询应返回:

16:24:00
16:24:10
16:24:30

非常感谢您提供的任何帮助

最佳解决方案-对时间戳进行编号和排序,仅在连续记录上3秒或更长时间内自动加入:

select a.* from (
     select timestamp, 
    @curRow := @curRow + 1 AS row_number 
    from table
    JOIN  (SELECT @curRow := 0) r 
    order by timestamp

 )a inner join (

    select timestamp, 
    @curRow := @curRow + 1 AS row_number 
   from table
    JOIN  (SELECT @curRow := 0) r 
    order by timestamp

 )b on time_to_sec(a.timestamp)<time_to_sec(b.timestamp)-2 and
 a.row_number=b.row_number-1

不久前我也有类似的问题

这是我想到的,效果很好


I.此查询将“您的_表”(此处称为x)中的所有结果分组5秒。 这意味着它将在5秒内输出结果计数

二,。此查询将“your_table”(此处称为x)中的所有结果分组1分钟。 如上所述,它将输出1分钟时间范围内的结果计数

查询I和您的输入的输出示例

count(x.id), created_at 
1 16:24:00  
3 16:24:10  
1 16:24:30

希望这有帮助。

根据描述,
16:24:10
将不包括在内,因为它与另一条记录仅相差1秒。只有那些时间值小于某个特定记录的记录才会考虑到差异吗?@MarkWilkins理想情况下应该考虑所有记录,我的意思是,与某个特定记录没有比较,但与所有记录相比。。。是的,你是对的,我编辑了这个问题以包括16:24:10。虽然我已经将这个答案标记为已接受,但我现在意识到,第一个查询将返回以0或5结尾的记录(显然是因为应用了除法)。只有在不存在此类记录的情况下,才会为在处创建的第二个_返回不同的值。因此,可能存在不考虑的重复项,其中created_at的秒数不以0或5结尾,即从53到55应被视为1,但此查询将返回从50到55和55到00的2。你怎么认为?非常聪明
SELECT count(x.id), x.created_at FROM your_table AS x 
       GROUP BY ( 60 * 60 * HOUR( x.created_at ) + 
                  60 * FLOOR( MINUTE( x.created_at )) +
                  FLOOR( SECOND( x.created_at ) / 5))
SELECT count(x.id), x.created_at FROM your_table AS x 
       GROUP BY ( 60 * HOUR( x.created_at ) + 
                  FLOOR( MINUTE( x.created_at ) / 1))
count(x.id), created_at 
1 16:24:00  
3 16:24:10  
1 16:24:30