MySQL查询(顺序记录......)

时间:2013-04-29 10:20:03

标签: mysql

我有一个具有以下表结构的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

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

2 个答案:

答案 0 :(得分: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%'

答案 1 :(得分:0)

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

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

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