如何捕获事件 X 的日期,然后捕获在事件 X 之后发生的事件的日期

时间:2021-06-21 20:16:12

标签: mysql

所以我正在处理事件数据。

我需要确定“X 发生”的时间,将该数据存储在列中,然后确定“生产中”发生的时间。 现在,我只想要在“X 发生”之后出现的第一个“生产中”我不关心以前的。 注意:在“X 发生”和“生产中”发生之间可能存在多种状态。

我尝试了什么:案例时间、自连接、表格......对我没有任何帮助。

非常感谢任何帮助,非常感谢朋友!

TblEvents  
=========
 EventID OrderID EventDate       Status  
       1       2 01/02/2011      in-production
       2       2 02/02/2011      pending
       3       2 03/02/2011      on-hold
       4       2 03/02/2011      stuck
       5       2 03/02/2011      *X happens*
       6       2 04/02/2011      pending
       7       2 05/02/2011      *in-production*
Output table:

date of event X | date of "in-production"
03/02/2011        05/02/2011

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT
    OuterTblEvents.EventDate AS 'date of event X',
    (
        SELECT EventDate
        FROM TblEvents
        WHERE
            TblEvents.Status = 'in-production'
            AND TblEvents.EventID > OuterTblEvents.EventID
        ORDER BY TblEvents.EventID
        LIMIT 1
    ) AS 'date of "in-production"'
FROM TblEvents OuterTblEvents
WHERE OuterTblEvents.Status = 'X happens'

但请注意,如果表很大和/或您经常运行 - 性能可能会受到影响,因为在外部查询中找到的每一行都会调用一次内部查询。

此外,Status, EventID 上的复合索引应该使外部和内部查询的性能更高。外部查询将仅使用索引的 Status 部分,内部查询将同时使用 StatusEventID。请注意,此复合索引中列的顺序很重要。