Для правильного вопроса надо знать половину ответа
С MSSQL практически не знаком, но ошибка вполне понятная.
В HAVING ожидается выражение, результат которого - TRUE или FALSE. Вы же пытаетесь подсунуть целочисленное значение MIN(id).
DELETE e
FROM #employees e
INNER JOIN (
SELECT id
,RANK() OVER (PARTITION BY pass_num ORDER BY ID) RNK
FROM #employees
) X ON X.id = e.id
WHERE x.RNK > 1
Можно попробовать указывать условие по валюте/максимальной дате в джоине, типа так:
SELECT
item_id,
I.price * COALESCE(R.rate, 1) price_in_byr
FROM Items AS I
LEFT JOIN Rates AS R ON
I.currency = R.currency AND
R.date = (SELECT MAX(date) FROM Rates WHERE Rates.currency = I.currency)
WHERE
item_id = 5;
SELECT TOP 1 item_id, date,
CASE I.currency
WHEN 'BYR'
THEN I.price
ELSE I.price * R.rate
END price_in_byr
FROM Items AS I FULL JOIN Rates AS R ON I.currency = R.currency
WHERE item_id = 5 AND R.date <= (SELECT MAX(date) FROM Rates)
ORDER BY date DESC