tsql 查找过去 18 个月未联系的成员

tsql to find members not contacted in past 18 months

我有一个 table,它有 ContactNumber (Bigint)、MemberNumber(bigInt) 和 ContactDate(date)。

table 有数百万条记录(附样本数据图像)。我想获取过去 18 个月未联系会员的所有记录。我如何使用 tsql 做到这一点?

非常感谢您的帮助。

谢谢。

您必须有一个成员 table 包含您的所有成员,对吗?假设你这样做了,只是 select 在过去 18 个月内没有联系的所有成员。

SELECT *
FROM Member m
LEFT JOIN Contacts c on m.MemberNumber = c.MemberNumber AND
  c.ContactDate > DATEADD(Month, -18, GETDATE())
WHERE c.ContactNumber IS NULL

我相信这也行。

SELECT *
FROM   Member m
WHERE  NOT EXISTS 
  (
    SELECT *
    FROM   Contacts
    WHERE  MemberNumber = m.MemberNumber
            AND ContactDate > DATEADD(MONTH, -18, GETDATE())
  )

I want to get all the records where member has not been contacted for last 18 months.

您可以使用 not exists:

select t.*
from mytable t
where not exists (
    select 1
    from mytable t1
    where 
        t1.MemberNumber = t.MemberNumber 
        and t1.ContactDate >= dateadd(month, -18, cast(getdate() as date))
)

有了 (MemberNumber, ContactDate) 上的索引,这应该是相当有效的。

另一种选择是使用 window 函数:

select *
from (
    select t.*, max(ContactDate) over(partition by MemberNumber) maxContactDate
    from mytable t
) t
where maxContactDate < dateadd(month, -18, cast(getdate() as date))