对我来说有点复杂。
我有一个充满成千上万条记录的数据库,其中许多是重复的。
我需要获取过去一年内的所有记录,但要确保该记录的每个实例都在去年内,例如如果有重复记录,且记录早于一年,则不应包括在内。
到目前为止,我有以下内容...
步骤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'
))
)
我的问题是,这是做到这一点且准确的好方法吗?
还是我错过了一些可以恢复以前的重复记录的东西...
任何关于此方法是否正确或达到简要要求的想法都是很好的。
答案 0 :(得分:0)
您想要在今年之前在同一电子邮件地址上没有记录的记录:
select r.*
from results r
where not exists (select 1
from results r2
where r2.email = r.email and
r2.created_date < dateadd(year, -1, getdate())
);