ГДЕ условия в том же столбце

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть следующий запрос, который содержит несколько условий в одном поле. Он работает нормально, но не уверен, что это правильный способ сделать это.

Я хочу отобразить все транзакции с определенной даты, также, если у клиента есть дата ссылки, тогда игнорируйте транзакции, которые были выполнены до даты ссылки.

 DECLARE @Date DATETIME = '2019/03/09 00:01:57.000'

    SELECT  
        f.[OID] ,
        f.[CustomerNum] ,
        f.[Amount] ,
        f.[TransactionDate] ,
        cus.Linkdate            
FROM    [Transaction] f
INNER JOIN dbo.Customer cus ON cus.CusNum = f.CustomerNum AND cus.OID = f.OID
WHERE   f.OID = 16 AND f.CustomerNum = 1234
        AND f.TransactionDate > @Date
        AND f.TransactionDate >= ISNULL(cus.Linkdate,@Date)
  

Комментарии:

1. Насколько велики ваши данные? Возможно, вы захотите рассмотреть возможность использования временной таблицы для первого отфильтровывания вашей LinkDate, а затем запуска оставшихся предикатов для временных данных.

Ответ №1:

Ваш запрос в порядке, но я предпочитаю формулировать его как:

 WHERE f.OID = 16 AND
      f.CustomerNum = 1234 AND
      f.TransactionDate > @Date AND
      (cus.LinkDate IS NULL OR f.TransactionDate >= cus.Linkdate)
  

Я считаю, что это лучше передает смысл логики.