查找数据库中在一段时间内重复的记录

时间:2011-10-14 21:06:48

标签: mysql

我在MySQL中有一系列记录,代表设备的故障排除事件。我很有兴趣找到哪些设备在给定的时间跨度内有连续的故障排除事件。

例如,我想知道两个或更多故障排除事件何时在5天之内发生,但我不确定如何构建查询以列出所有设备。

我有两张类似的表:

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-01-01上的事件被隔离超过5天,因此应该省略。

我很感激如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

这是一个WAG。

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

可能 where event_count > 1 而不是拥有。

对于日期范围,将范围检查添加到最内层查询(具有count()的查询)。

例如,添加(从另一个答案剪断): WHERE events.datetime BETWEEN DATE_SUB(CURDATE(), INTERVAL 5 DAY) AND CURDATE()

答案 1 :(得分:0)

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

这将找到过去5天内发生过事件的所有设备。您可以将CURDATE()替换为任何开始日期。