1

我有一个具有以下表结构的 MySQL:

table mt_events
id - record id
doc_id - document id
event_id - event id
date - event date
user - user

问题是我需要一个包含事件 3 和后续事件 4 的所有文档的报告,这似乎是一个非常简单的 JOIN,除了一个文档可以有 MULTIPLE 事件 3,它可能会或可能不会跟随事件 4... 像这样:

1 3a 4a 11 12 8 3b 4b 3c 4c 3 17 5

到目前为止,我已经做到了:

SELECT ev.date AS Event1, ev.user AS User1, ev2.date AS Event2, ev2.user AS User2
FROM  `mt_events` ev
JOIN mt_events ev2 ON ev2.doc_id = ev.doc_id AND ev2.event = 4 AND ev2.date > ev.date
WHERE ev.event = 3 AND ev.date LIKE '2013-03%'

但这不会产生所需的结果 -

3a 4a
3b 4b
3c 4c

并给出 -

3a 4a 
3a 4b
3b 4b
3a 4c
3b 4c
3c 4c

任何帮助,将不胜感激...

4

2 回答 2

2

尝试:

SELECT ev.date AS Event1, ev.user AS User1, ev2.date AS Event2, ev2.user AS User2
FROM  `mt_events` ev
JOIN mt_events ev2 ON ev2.doc_id = ev.doc_id AND ev2.event = 4 AND ev2.date =
    (select min(el.date) from `mt_events` el
     where el.doc_id = ev.doc_id AND el.event = 4 AND el.date > ev.date)
WHERE ev.event = 3 AND ev.date LIKE '2013-03%'
于 2013-04-29T10:36:04.917 回答
0

尝试移动ev2.event = 4 AND ev2.date > ev.dateto WHERE 子句。似乎更合适。

此外,您似乎没有关于表中直接优先级的信息 - 只有它们的顺序(日期)。因此,您尝试执行的查询将返回每对事件 3 和 4 的行,其中 3 在 4 之前发生(但不一定在之前)。

您可能应该使用存储过程或其他方式来迭代结果并过滤掉不符合您条件的结果。

于 2013-04-29T10:28:01.223 回答