如何查找和筛选每个唯一列的最后一个事件 - SQL查询

时间:2018-06-06 13:27:08

标签: mysql select

我的数据库中有一个名为Events的表。 在这个表中,我得到的每条消息都有事件,系统用它来执行每一步。

让我们说

ID  class      Time             MessageID    Text
 1  message    6/6/2018 8:00    aaa          message received
 2  message    6/6/2018 8:01    aaa          message processed
 3  message2   6/6/2018 8:02    bbb          message received 
 4  message    6/6/2018 8:03    aaa          message send
 5  message2   6/6/2018 8:04    bbb          message processed
 6  message    6/6/2018 9:00    ccc          message received
 7  message    6/6/2018 10:00   ccc          message processed

我不时会遇到一些消息刚刚结束消息已处理

我需要编写一个查询,通过课程消息检查所选消息中的所有消息,并且他们的上一个事件是消息已处理 并给我结果只有最后一行

提前谢谢

1 个答案:

答案 0 :(得分:0)

我想我的问题有解决方案......

select ID, class, time, messageID, text
from Events
where class = 'message'
  and text = 'message processed'
  and time BETWEEN '2018-06-06 00:00:00' AND '2018-06-06 23:59:59'
order by ID desc
limit 1

简要说明:

查询将搜索具有where子句中条件的所有记录:class ='message',text ='message processed'和日期时间。

然后按ID按降序排序,排序后,第一个找到的ID将是表格中的最后一个ID。

然后使用LIMIT命令仅返回第一条记录。

提示:您不应该使用像DATE(datecolumn)='2018-06-06'这样的命令,因为它的性能很差。

我希望我能帮到你!