我有一個表:,它存儲從應用程序發送到另一個的消息的詳細信息。 如果消息失敗,則狀態設置爲「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記錄,那麼您就是最新的記錄。 –