Немного сложный для меня.
У меня есть база данных, содержащая сотни тысяч записей, многие из которых дублируются.
Мне нужно получить все записи за последний год, но убедитесь, что каждый экземпляр этой записи находится за последний год, например, если запись дублируется, а одна старше года, это не должно быть включено.
Пока у меня есть ниже ...
Шаг 1 - определить самую раннюю дату для каждой записи
SELECT MIN(CreateDate) AS Date, Email FROM Results R
WHERE (R.Email IS NOT NULL AND R.Email <> '')
GROUP BY R.Email
Я создал это как представление и назвал его EarliestInteraction
Шаг 2 - получить все за последний год
Примечание - поэтому мне нужны записи за последний год, но они также должны быть в таблице журнала. Таким образом, все записи за последний год, которые также присутствуют в некоторых таблицах журналов.
Пока я сделал это ...
SELECT * FROM EarliestInteraction ECI
WHERE ( CAST(ECI.Date AS DATE) >= CAST(GETDATE() - 365 AS DATE) )
AND (
EXISTS (
SELECT Id FROM LOG1 R
WHERE Source = 'LOGGED'
AND R.Email = ECI.Email
)
OR
EXISTS (
SELECT Id FROM LOG2 R WHERE (R.Email IS NOT NULL AND R.Email <> '')
AND R.Email = ECI.Email
AND R.EventType IN (
'LOGGED'
))
)
У меня вопрос, это хороший способ сделать это и точно?
Или я упускаю что-то, что вернет более ранние дубликаты ...
Любые мысли о том, является ли это точным или достигает краткости, было бы замечательно.