Если я читаю это право вы хотите запрос, который будет работать так же, как:
SELECT MIN(id) FROM foo WHERE id > ?
но для нескольких идентификаторов. Таким образом, вы получаете следующий существующий id в последовательности для определенного списка идентификаторов. Это кажется немного странным, я чувствую, что функциональность, которую вы пытаетесь достичь, возможно, может быть реализована по-другому. Я также предполагаю, что есть веская причина, по которой вы не можете просто получить всю таблицу и найти правильные идентификаторы в любом коде, использующем данные.
Сказав это, да, это можно сделать. У вас уже есть запрос, который получает правильный «следующий» идентификатор, поэтому вы можете присоединиться к таблице против себя, чтобы создать таблицу с двумя столбцами id, один из которых является исходным идентификатором, а другой - «следующий». Затем вы можете отфильтровать эту таблицу по списку исходных идентификаторов и вернуть другой идентификатор. Как что:
SELECT f1.id AS id
FROM foo f1, foo f2
WHERE f1.id =
(SELECT MIN(f3.id) FROM foo f3 WHERE f3.id > f2.id)
AND f2.id IN (1, 2, 4, 6)
;
На моей системе, которая возвращает 2, 4, 5, 7, если установка я мой стол, как вы описали (не ИН 3, 5 и 7 имеют свойство < = 0).
Этот запрос может быть не самым быстрым из-за большого количества данных.
Я думаю, что это то, что вы хотите сделать, так как developerCK говорит, что вы можете использовать GROUP_CONCAT
, если вам нужно кормить результаты property > 0
запроса в запросе.Но если это то, что вы хотите сделать, вы можете пропустить среднего человека и объединить такие запросы:
SELECT f1.id AS id
FROM foo f1, foo f2
WHERE f1.id =
(SELECT MIN(f3.id) FROM foo f3 WHERE f3.id > f2.id)
AND f2.property > 0
;
Каково практическое применение этого запроса? Идентификационные номера обычно произвольны. Это больше похоже на головоломку, чем на проблему программирования в реальном мире. – Barmar
Причина в том, что у меня есть только 2000 строк, но около 20 свойств и> 2000000 комбинаций свойств, которые я хочу проверить, поэтому мне нужно минимизировать запросы запросов. Упрощенный пример того, чего я пытаюсь достичь: получить avg ° C, где накануне шел дождь. –
Ahh, это не совсем ID, которые вас интересуют, это столбец типа 'date'. – Barmar