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

ulydmbyx  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(326)

我有一个包含contactnumber(bigint)、membernumber(bigint)和contactdate(date)的表。
该表有数百万条记录(附上示例数据图像)。我想得到过去18个月没有联系过会员的所有记录。如何使用tsql实现这一点?
非常感谢你的帮助。
谢谢。

gmxoilav

gmxoilav1#

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

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

我相信这也行。

  1. SELECT *
  2. FROM Member m
  3. WHERE NOT EXISTS
  4. (
  5. SELECT *
  6. FROM Contacts
  7. WHERE MemberNumber = m.MemberNumber
  8. AND ContactDate > DATEADD(MONTH, -18, GETDATE())
  9. )
展开查看全部
ukdjmx9f

ukdjmx9f2#

我想得到过去18个月没有联系过会员的所有记录。
你可以用 not exists :

  1. select t.*
  2. from mytable t
  3. where not exists (
  4. select 1
  5. from mytable t1
  6. where
  7. t1.MemberNumber = t.MemberNumber
  8. and t1.ContactDate >= dateadd(month, -18, cast(getdate() as date))
  9. )

带索引的 (MemberNumber, ContactDate) ,这应该是相当有效的。
另一种选择是使用窗口函数:

  1. select *
  2. from (
  3. select t.*, max(ContactDate) over(partition by MemberNumber) maxContactDate
  4. from mytable t
  5. ) t
  6. where maxContactDate < dateadd(month, -18, cast(getdate() as date))
展开查看全部

相关问题