SQL - Как использовать условие DateDiff, чтобы исключить прошлые записи и работать только над вновь вставленными записями - PullRequest
0 голосов
/ 18 мая 2018

У меня есть Просмотр, в котором перечислены записи, возраст которых меньше 80 дней.Представление находится в существующей таблице ( AeoiCaptureLog ), в которой уже есть записи из прошлого.

Я хочу реализовать фильтр в представлении, поэтому условие даты (<= 80) активно только для данных, вставленных после развертывания представления в оперативной среде, и оно не должно учитывать уже существующие данные, которые имеют 80дней или меньше.Но после 100 дней развертывания он все равно должен возвращать данные за последние 80 дней, поэтому я предполагаю, что мы не можем использовать дату создания представления в качестве параметра. </p>

CREATE VIEW [dbo].[vAeoiSurplusCaseCreation] AS
Select AccessNumber, DocumentID, LastModifiedDate, StatusCode
FROM AeoiCaptureLog 
WHERE StatusCode IN (6, 13, 15) 
AND DATEDIFF(dd, [LastModifiedDate], GETDATE()) <= 80

Пожалуйста, не стесняйтесь и дайте мне знать, если возникнут какие-либо запросы.

Важное замечание:

  • В первый день развертывания - представление не должно возвращать никаких данных (если в AeoiCaptureLog нет новых записей после развертывания представления), НО
  • В день 100 после развертывания - представление должно возвращать данные только за последние 80 дней.

1 Ответ

0 голосов
/ 18 мая 2018

Для SQL Server (Transact-SQL) мы могли бы сделать что-то вроде этого:

 AND LastModifiedDate >= DATEADD(dd,GETDATE(),-80)
 AND LastModifiedDate >  CAST('2018-05-17' AS DATETIME)

, где литерал «2018-05-17» представляет «День 1 развертывания»

Первые условия возвращаются на 80 дней.

Второе условие возвращает назад к указанной дате.

Поскольку оба эти значения должны иметь значение ИСТИНА, мы ограничим возврат большимиз двух значений даты.

Мы могли бы сделать это более уродливым и использовать сложное выражение CASE, чтобы вернуть большее из двух значений даты, и сделать одно сравнение.


С MySQL подобный подход был бы

 AND LastModifiedDate >= DATE(NOW()) + INTERVAL -80 DAYS
 AND LastModifiedDate >  '2018-05-17' + INTERVAL 0 DAYS
...