【发布时间】:2010-07-11 05:32:30
【问题描述】:
考虑下面的事件表。 OrderID 字段是 Orders 表的外键。
OrderID EventType TimeAdded* 已处理 1 ... 3 小时前 0 2 ... 5 分钟前 0 1 ... 2 小时前 0 1 ... 1 小时前 0 3 ... 12 分钟前 1 3 ... 3 小时前 0 2 ... 2 小时前 0*TimeAdded 实际上是一个 mysql 日期时间字段。我在这里使用了人类可读的时间来使问题更容易阅读。
我需要获得一个包含每个 OrderID 的结果集,只有一次,但前提是所有附加到给定订单 ID、已进行状态为 0 的记录都已添加超过 15 分钟。
在此示例中,应从结果集中忽略订单 #2,因为它在过去 15 分钟内添加了一个未处理的事件。它有一个 2 小时前未处理的事件这一事实是无关紧要的。
应该包括订单#3。尽管其中一个条目是在 12 分钟前添加的,但该条目已被处理,不应考虑。此集合中只应考虑“3 小时前”条目,且大于 15 分钟前。
应该包括订单 #1,因为所有三个未处理的事件都发生在超过 15 分钟之前。
我不确定这是否需要使用子查询或 group by 或可能两者都使用?
伪代码:
SELECT * FROM OrderEvents WHERE Processed=0 GROUP BY OrderID
OMIT WHOLE GROUP IF GROUP_MIN(TimeAdded) >= (NOW() - INTERVAL 15 MINUTE)
我只是不确定语法是否正确?
【问题讨论】: