Цель моего запроса - связать записи DateTimeIn и DateTimeOut между двумя таблицами посредством RegistrationNumber. (Данные из обследования использования парковки ...)
Сначала я попробовал соединение, но оно не справилось со сложностью. Например, у транспортного средства может быть DateTimeOut (он вышел из зоны парковки), но нет DateTimeIn (он никогда не парковался, возможно, потому, что все отсеки были заняты). Кроме того, я должен убедиться, что первый DateTimeIn связан с самым ранним DateTimeOut и что каждый DateTime связан только один раз.
Следующий «вложенный запрос», казалось, выполнил задание, но он дал ложноположительные результаты. Я понятия не имею, как они возникли. Даже если не было DateTimeOut для RegistrationNumber, он был возвращен. Как ни странно, после того, как все ссылки на таблицы были явными, эти ложные срабатывания были устранены.
-- Implicit reference to the second table (causes false positives):
SELECT
RegistrationNumber,
DateTimeIn,
(SELECT MIN(O.DateTimeOut) FROM HobieBeachVehiclesOut O WHERE O.RegistrationNumber = RegistrationNumber AND O.DateTimeOut > DateTimeIn) AS DateTimeOut
FROM HobieBeachVehiclesIn
ORDER BY DateTimeIn, RegistrationNumber
-- Explicit references all round (no glaring errors):
SELECT
RegistrationNumber,
DateTimeIn,
(SELECT MIN(O.DateTimeOut) FROM HobieBeachVehiclesOut O WHERE O.RegistrationNumber = A.RegistrationNumber AND O.DateTimeOut > A.DateTimeIn) AS DateTimeOut
FROM HobieBeachVehiclesIn A
ORDER BY DateTimeIn, RegistrationNumber
Результаты:
-- Implicit reference to the second table (causes false positives):
JHB 036 03/05/2019 00:09:00 03/05/2019 06:08:00
FNB 559 03/05/2019 06:00:00 03/05/2019 06:08:00
HGB 115 03/05/2019 06:05:00 03/05/2019 06:08:00
-- Explicit references all round (no glaring errors):
JHB 036 03/05/2019 00:09:00 NULL
FNB 559 03/05/2019 06:00:00 03/05/2019 06:48:00
HGB 115 03/05/2019 06:05:00 03/05/2019 07:53:00
Ошибки очевидны и теперь, со второго взгляда, еще более своеобразны. Откуда этот DateTimeOut? И почему запрос не может обработать «неявную ссылку» на dbo.HobieBeachVehiclesIn?