我的查询的目的是通过RegistrationNumber在两个表之间链接DateTimeIn和DateTimeOut条目。(数据来自一项停车位利用率调查...)
我先尝试了连接,但它不能处理复杂性。例如,一辆车可能有一个DateTimeOut (它离开了停车区),但没有DateTimeIn (它从来没有停车,可能是因为所有的停车位都被占用了)。此外,我还必须确保第一个DateTimeIn链接到最早的DateTimeOut,并且每个DateTime只链接一次。
下面的“嵌套查询”似乎完成了工作,但它返回了假阳性结果。我不知道这些是怎么产生的。即使没有RegistrationNumber的DateTimeOut,也会返回一个。奇怪的是,在显式地引用了这些表之后,这些误报就被消除了。
-- 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的“隐式引用”?
https://stackoverflow.com/questions/56259481
复制相似问题