我有一个表:,它存储从应用程序发送到另一个的消息的详细信息。 如果消息失败,则状态设置为“ERR
”。有一个重试机制,可以自动重试发送错误消息。重试时,消息可能成功(OUT
)或再次出错。SQL Query基于最新时间戳获取最新消息
我需要构建一个SQL
查询,该查询只显示那些消息的最新消息状态为ERR
。
因此我的查询应该显示message ID B456
而不是A123
。
我已经框下面的查询:
select a.* from msg_status a where a.message_status = 'ERR' and a.id in
(select b.id from msg_status b where b.message_status = 'OUT' group by b.id having max (a.timestamp) > max (b.timestamp))
的查询工作,但相当缓慢。你能否让我如何调整这个查询来更快地检索数据。如果你可以建议任何替代查询,我也可以。
下面是表:
ID Message_Status Timestamp
A123 OUT 05-10-17 11:00
B456 ERR 05-10-17 10:00
B456 OUT 05-10-17 9:00
A123 ERR 05-10-17 8:00
B456 ERR 05-10-17 7:00
C789 OUT 05-10-17 6:00
数据库:甲骨文
根据你写的内容,你可以检索where status = Err并且不存在任何具有更大时间戳的同一个id的行,不是? –
@ stephen.vakil,我不确定这会工作,因为消息可能会从ERR到OUT,然后可能再次ERR。因此,我正在查找最新的时间戳并且不会超过ERR消息的时间戳。 –
我不关注。如果没有更多时间戳的id记录,那么您就是最新的记录。 –