The subquery returns one row, not necessarily for the right Clock no
. Only looking at the right Clock no
requires a relation between the subquery and an outer table. That's not allowed in join
.
One way around that is a subquery in the on
condition, like:
SELECT EMP.[Clock no]
, EMP.[Card id]
, EMP.[Current pay cat]
, EMP.[Pay category]
, WR.[Start time]
, WR.[Dated]
FROM Employees EMP
JOIN [Work records] WR
ON WR.[Open flag] = 'Y'
AND WR.[Clock no] = EMP.[Clock no]
AND WR.Dated =
(
SELECT max(Dated)
FROM [Work records] WR2
WHERE WR2.[Open flag] = 'Y'
AND WR2.[Clock no] = EMP.[Clock no]
AND WR2.Dated <= '2013-01-07'
)
AND WR.[Start time] =
(
SELECT max([Start time])
FROM [Work records] WR3
WHERE WR3.[Open flag] = 'Y'
AND WR3.[Clock no] = EMP.[Clock no]
AND WR3.Dated =
(
SELECT max(Dated)
FROM [Work records] WR4
WHERE WR4.[Open flag] = 'Y'
AND WR4.[Clock no] = EMP.[Clock no]
AND WR4.Dated <= '2013-01-07'
)
)
WHERE EMP.[Clocked in flag] = 'Y'