Mysql sql查询-如何避免;事实上";根据时间重复记录
如何执行sql查询以返回表中的所有记录,但与另一条记录相差不到2秒的记录除外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 +
示例-考虑这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