SELECT *
FROM Table1 D1 (nolock)
WHERE 1 = 1
AND NOT EXISTS (SELECT TOP 1 *
FROM Table2 D2 (nolock)
WHERE d1.Account = d2.Account
AND d2.Amount BETWEEN (d1.Amount - 5) AND (d1.Amount + 5)
AND Datediff(DD, d1.SALEDATE, d2.SALEDATE) BETWEEN 0 AND 60)
Я удалил много функций, которые не имеют отношения к вопросу.Value2 МЕЖДУ (Value1 - 5) AND (Value1 + 5)
По существу, я хочу, чтобы он находил записи, когда определенные критерии выполнялись в первой части (я использую 1 = 1 для простоты здесь), а затем исключаю все, что имело продажу за последние 60 дней за сумму -/+ $ 5 на том же счете.
По какой-то причине он просто возвращает 0 записей каждый раз, но при осмотре таблицы базы данных вручную это неверно. Я использую Transact SQL.
Возможно ли, что у вас есть разница в обратном направлении? (т. е. он должен быть «между -60 и 0' - или наоборот' d1' и 'd2') –
Не имеет значения для результатов. Таким образом, я использовал Datediff сотни раз и никаких проблем. Это первый раз, когда я использую выражение с d2.Amount BETWEEN (d1.Amount - 5) AND (d1.Amount + 5). –
Нет проблем. Был только удар в темноте. Можете ли вы дать нам пример набора данных для работы? –