Mysql 在数据库中查找在一段时间内重复的记录
我在MySQL中有一系列记录,表示设备的故障排除事件。我感兴趣的是找出哪些设备在给定的时间跨度内连续出现故障排除事件 例如,我想知道两个或多个故障排除事件在5天内发生的时间,但我不确定如何构造查询以列出所有设备 我有两张类似的表格:Mysql 在数据库中查找在一段时间内重复的记录,mysql,Mysql,我在MySQL中有一系列记录,表示设备的故障排除事件。我感兴趣的是找出哪些设备在给定的时间跨度内连续出现故障排除事件 例如,我想知道两个或多个故障排除事件在5天内发生的时间,但我不确定如何构造查询以列出所有设备 我有两张类似的表格: devices ----- id name events ----- id device_id datetime 使用此示例数据: events ----- id device_id datetime --- ---
devices
-----
id name
events
-----
id device_id datetime
使用此示例数据:
events
-----
id device_id datetime
--- --- ---
1 1 2011-01-01
2 1 2011-06-15
3 2 2011-06-18
4 1 2011-06-18
5 2 2011-06-20
我想构造一个查询,提供如下结果:
device_id event_id datetime
1 2 2011-06-15
1 4 2011-06-18
2 3 2011-06-18
2 5 2011-06-20
由于2011年1月1日的事件被隔离了5天以上,因此应忽略该事件
我希望你能给我指点如何解决这个问题。这里有一个问题
select
device_id,
event_id,
datetime
from
events
where
device_id in
(
select
device_id
from
(
select
device_id,
count(device_id) event_count
from
events
group by
device_id
having
event_count > 1
)
)
order by
device_id,
event_id,
datetime
可能
在哪里
事件计数>1
而不是拥有
对于日期范围,将范围检查添加到最内部的查询(带有count()的查询)
例如,添加(从另一个答案截取):
其中events.datetime介于DATE_SUB(CURDATE(),间隔5天)和CURDATE()之间
这将查找在过去5天内发生事件的所有设备。您可以用任何开始日期替换CURDATE()
。一个相关问题,但事件本身有一个日期范围:选择时间段内的重复事件这与日期范围要求有什么关系?这将列出日期范围内的所有事件,但我对重复事件感兴趣。应忽略日期范围内设备的单个事件。
SELECT devices.`device_id`, events.`id` AS event_id, events.`datetime`
FROM devices
INNER JOIN events ON events.`id` = devices.`id`
WHERE events.`datetime` BETWEEN DATE_SUB(CURDATE(), INTERVAL 5 DAY) AND CURDATE()
ORDER BY devices.`device_id` ASC