Я пытаюсь написать SQL-запрос, который будет использоваться в отчете SSRS. Он предназначен для отображения количества изменений, внесенных пользователем в таблицу между двумя датами. У меня запрос работает нормально, за исключением случаев, когда я пытаюсь удалить все записи определенного пользователя в определенный день, поскольку это было сделано для очистки данных и искажает значения.
Предложение WHERE, которое я пробовал, выглядит следующим образом:
WHERE
(DATEADD(MONTH, DATEDIFF(MONTH, 0, Hist.Timestamp), 0) >= @FromDate)
AND
(DATEADD(MONTH, DATEDIFF(MONTH, 0, Hist.Timestamp), 0) < @ToDate)
AND
(Hist.Timestamp <> '2022-04-26' AND Hist.UserId <> 'DOMAIN\John.Smith')
Но это удаляет все записи этого пользователя, а не только записи этого пользователя в этот день.
Как я могу отредактировать это предложение WHERE, чтобы исключить результаты, относящиеся к обоим элементам?
Спасибо, Павел
...AND NOT (hist.timestamp = '2022-04-26' AND hist.userid = 'DOMAIN\John.Smith')
Ответ показывает логику, которую вы просили. Если это не делает то, что вы хотите, у вас есть дополнительные проблемы (например, может быть, такая жестко запрограммированная проверка даты без указания формата даты рискованна). Если вам нужна дополнительная помощь, пожалуйста, предоставьте образцы данных и ожидаемый результат.
Ваш комментарий относительно формата даты дал мне ответ для моего конкретного набора данных, поскольку hist.timestamp является форматом DATETIME, поэтому только ввод даты в предложении WHERE был неправильным. Я отредактировал его на AND NOT (Hist.Timestamp < '2022-04-27' AND Hist.UserId = 'DOMAIN\John.Smith'), который теперь работает.
Отлично, это то, что я имел в виду под «рискованным»;)
Спасибо за ваш ответ, к сожалению, он показывает полный набор данных для этого пользователя, включая результаты на эту дату.