Это ваши условия:
WHERE order_date_time >= DateAdd(month, -3, getdate())
WHERE DATEDIFF(month, order_date_time, GetDate()) <= 3
Самое главное.,,Они делают разные вещи.Первый возвращается три месяца.Итак, если сегодня 15 апреля, то после 15 января он берет все.
Второй смотрит на границы месяца .Таким образом, он подсчитывает весь январь одинаково и принимает все значения с 1 января.
Хотя вы должны использовать нужную вам версию, первая версия намного, намного лучше.По сути, он может использовать индексы и разделы.Вызов функции DATEDIFF()
затрудняет (невозможно?) Для оптимизатора использование индексов для order_date_time
.
Если вы намереваетесь использовать вторую форму, я бы рекомендовал перефразировать ее примерно так:
WHERE order_date_time >= datefromparts(year(dateAdd(month, -3, getdate())), month(dateAdd(month, -3, getdate())), 1)