gpt4 book ai didi

mysql - 查找类型 B 和 C 之间发生的所有类型 A 的日志事件

转载 作者:行者123 更新时间:2023-11-29 00:50:52 26 4
gpt4 key购买 nike

我正在尝试找到一种很好的方法来查找同时发生在事件类型 B 和 C 之间的所有类型 A 事件。

此外,事件 B 和 C 必须共享一个 process_id。

每个 process_id 组将有一个 B 事件和一个 C 事件。

表结构如下所示:

CREATE TABLE IF NOT EXISTS `eventlog` (  
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL,
`process_id` varchar(20) NOT NULL,
`event` varchar(25) DEFAULT NULL,
`data` varchar(45) DEFAULT NULL,
)

我的尝试是这样的:

SELECT q3.time, q3.event, q3.process_id, q3.data   
FROM `eventlog` as q1, `eventlog` as q2, `eventlog` as q3
WHERE q1.process_id=q2.process_id AND q1.process_id=q3.process_id
AND q1.event='EVENTB' AND q2.event='EVENTC' AND q3.event='EVENTA'
AND q3.time BETWEEN q1.time AND q2.time

当我运行它时,它挂起了。有没有关于更有效或更固定的方法来执行此操作的想法?

谢谢!

最佳答案

您可以使用分组依据来获取每个 process_id 的开始和结束时间。然后,这可用于连接回事件日志表并选择所需的记录。

SELECT * FROM eventlog e

JOIN (
SELECT
process_id,
MIN(CASE event WHEN 'EVENTB' THEN time END) start_time,
MAX(CASE event WHEN 'EVENTC' THEN time END) end_time
FROM eventlog
GROUP BY process_id
) t
ON e.time BETWEEN t.start_time AND t.end_time

WHERE
e.event = 'EVENTA'

关于mysql - 查找类型 B 和 C 之间发生的所有类型 A 的日志事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com