我正在开发一个接收和解析以结构化方式格式化的电子邮件并将信息保存到 MySQL 数据库的系统。每封电子邮件都描述了一个特定的事件。但是,有时单个事件可能会生成多封电子邮件,因为调度员更新事件详细信息时会发送一封新电子邮件。随着新信息的添加,这可能会在几分钟内发生多次。
我正在尝试编写一个查询,该查询将仅选择描述给定事件的最新行。
下面是表格的外观示例。请注意EventID
'3
和4
指的是同一事件。事件4
只是最近收到的包含更多详细信息的电子邮件。人类可以快速查看地址、事件类型和接收时间,并推断它们指的是同一事件。问题是:我如何才能将其翻译成具有合理准确性的查询?
EventID EventReceived EventAddress EventType EventDetails
4 11-15-2012 22:55 1234 Anywhere Ln Fall In backyard. Possible fracture.
3 11-15-2012 22:54 1234 Anywhere Ln Fall In backyard.
2 11-15-2012 17:04 4321 Freedom Ct Heart Attack Short of breath. Took 2 NTG.
1 11-15-2012 13:43 9871 Main St Traffic Crash 2 vehicles in intersection. Fluid leaking from vehicle.
当我查询数据库时,我希望收到的是:
EventID EventReceived EventAddress EventType EventDetails
4 11-15-2012 22:55 1234 Anywhere Ln Fall In backyard. Possible fracture.
2 11-15-2012 17:04 4321 Freedom Ct Heart Attack Short of breath. Took 2 NTG.
1 11-15-2012 13:43 9871 Main St Traffic Crash 2 vehicles in intersection. Fluid leaking from vehicle.
起初,我试过这个:
SELECT * FROM table_name WHERE (EventID) IN (SELECT MAX(EventID) FROM table_name GROUP BY EventAddress) ORDER BY EventReceived DESC;
一般来说,它似乎有效,尽管至少有两个问题:
- 即使有几百条记录,查询也很慢(约 15 秒)
- 我怀疑我错过
EventAddress
了相同的事件,但是这些事件相隔几天。这些显然不是同一个事件,但可能会被卷起,因为我只抓住EventID
分组地址中的最高值。
所以:
- 如何提高查询效率,以及
- 我如何解释时间因素的重要性?(我可以对应该被视为同一事件的事件施加任意时间限制;例如 15 分钟)。
将这个逻辑放在我的应用程序中而不是依赖于 SQL 查询是否可取?
感谢所有做到这一点并且有任何可能有用的想法的人!
注意:我看了一下这个问题,认为它可能会有所帮助,但我不确定我是否可以使它工作,因为时间不会完全相同。