Рассмотрим таблицу событий ниже. Поле OrderID является внешним ключом таблицы Orders.
OrderID EventType TimeAdded* Processed
1 ... 3 Hours Ago 0
2 ... 5 Minutes Ago 0
1 ... 2 Hours Ago 0
1 ... 1 Hour Ago 0
3 ... 12 Minutes ago 1
3 ... 3 Hours Ago 0
2 ... 2 Hours Ago 0
* TimeAdded является действительным полем даты и времени mysql. Я использовал удобочитаемое время, чтобы облегчить чтение вопроса.
Мне нужно получить набор результатов, который имеет каждый OrderID, только один раз, но только если ВСЕ записи, прикрепленные к данному идентификатору заказа, имеющие статус 0, были добавлены более 15 минут назад.
В этом примере порядок № 2 должен быть опущен из набора результатов, поскольку в него добавлено необработанное событие за последние 15 минут. Тот факт, что у него есть необработанное событие 2 часа назад, несущественен.
Заказ № 3 ДОЛЖЕН быть включен. Хотя одна из его записей была добавлена 12 минут назад, эта запись уже была обработана и не должна рассматриваться. В этом наборе должна рассматриваться только запись «3 часа назад», и она больше 15 минут назад.
Приказ № 1 СЛЕДУЕТ включать, поскольку все три необработанных события, связанные с ним, произошли более 15 минут назад.
Я не уверен, что для этого нужно использовать подзапрос или группу или, возможно, оба?
псевдокод:
SELECT * FROM OrderEvents WHERE Processed=0 GROUP BY OrderID
OMIT WHOLE GROUP IF GROUP_MIN(TimeAdded) >= (NOW() - INTERVAL 15 MINUTE)
Я просто не уверен в правильном синтаксисе?