Я написал запрос SQL, который выполнялся в течение 30 минут, и я думаю, что он был сформулирован неправильно.
Упрощенная схема базы данных имеет атрибуты CompanyName
, Customer
, ExpiryDate
и DeliveryDate
.
Приведенный ниже запрос хорошо работает при выборе всех кортежей, которые были проданы определенному клиенту «Компания XYZ»:
(SELECT a.* FROM certificates a
WHERE (a."CompanyName", a."ExpiryDate")
IN
(SELECT b."CompanyName", b."ExpiryDate"
FROM certificates b
WHERE b."Customer" = 'Company XYZ') )
Я хочу выбрать подмножество результатов запроса выше, где DeliveryDate
отношения a
(outer SELECT
) строго после DeliveryDate
отношения b
(inner SELECT
).
Это может не иметь никакого логического смысла, но я должен найти все кортежи, которые изменили DeliveryDate
в данных, так что это очень важно.
Это мой запрос, который не будет выполнен:
(SELECT a.* FROM certificates a
WHERE (a."CompanyName", a."ExpiryDate")
IN
(SELECT b."CompanyName", b."ExpiryDate"
FROM certificates b WHERE b."Customer" = 'Company XYZ'
AND b."DeliveryDate" < a."DeliveryDate") )