Вам не нужен подзапрос.Использование оконных функций более эффективно для подобных случаев.Большинство баз данных теперь поддерживают оконные функции / аналитические функции.
Кроме того, если вы ищете заказы по заданному списку, а не по списку заказов в таблице, попробуйте выполнить приведенный ниже пример запроса.Здесь «тестовая» таблица содержит записи о транзакциях, а ARRAY - список заказов, которые вы пытаетесь найти.Вам придется использовать функцию UNNEST, чтобы преобразовать массив в строки, а затем найти, какие идентификаторы порядка не существуют в тестовой таблице.Если бы у вас был список заказов, которые вы хотите найти в другой таблице, запрос мог бы быть написан по-другому.
WITH
dataset AS (
SELECT ARRAY[1,2,3,4,5] AS items
)
select order_id, status, order_time from
(
select order_id, status, order_time, row_number() over (partition by order_id order by order_time ) rn
from test
union all
select orders, null, null, 1 from dataset
cross join unnest(items) as t(orders) where orders not in (
select order_id from test
)
)
where rn = 1