У меня есть система, которая запрашивает информацию, отправляя во внешнюю систему 3 параметра: user, start_date и end_date.
У меня есть таблица
request (
id,
user,
start_date,
end_date,
status
)
, в которой регистрируются эти запросы и их состояние (Done
для запросов, которые вернулись, Waiting
для запросов, которые еще не вернулись).
Каждые несколько часов я буду повторно отправлять запросы, которые еще не были возвращены, хотя первоначальный запрос все еще может вернуться в будущем.
Через некоторое время моя таблица будет иметь несколько запросов для одного и того же пользователя / start_date / end_date, некоторые из них ожидающие, некоторые выполненные.
Мне нужен запрос, который возвращает список идентификаторов всех повторяющихся запросов, за исключением 1 Готово, где хотя бы один запрос имеет статус = Готово.
Таким образом, мне нужен способ очистить превышающие запросы для данного пользователя / start_date / end_date, если хотя бы один из них имеет статус = Done (не важно, какой, мне просто нужно сохранить 1 статус= Готово для данного пользователя / start_date / end_date).
До сих пор мне удавалось точно определить дубликаты запросов, по крайней мере 1 выполненных.Чтобы выбрать из этого запроса все, кроме одного, я, скорее всего, обернул бы весь этот запрос еще в 2 выбора и выполнил бы всю работу, но запрос как таковой уже очень медленный.Может ли кто-нибудь помочь мне изменить его и выбрать конечный результат, который мне нужен?
http://sqlfiddle.com/#!5/10c25a/1
Я использую SQLite
Ожидаемый результат от набора данных, представленного в sqlfiddle, следующий:
454, 457, 603, (604 or 605 not both), 607, 608