SQL SERVER-根据最早的日期(一年以内)获取记录

时间:2019-04-03 15:22:37

标签: sql sql-server duplicates

对我来说有点复杂。

我有一个充满成千上万条记录的数据库,其中许多是重复的。

我需要获取过去一年内的所有记录,但要确保该记录的每个实例都在去年内,例如如果有重复记录,且记录早于一年,则不应包括在内。

到目前为止,我有以下内容...

步骤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'
    ))
)

我的问题是,这是做到这一点且准确的好方法吗?

还是我错过了一些可以恢复以前的重复记录的东西...

任何关于此方法是否正确或达到简要要求的想法都是很好的。

1 个答案:

答案 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())
                 );