根据 SQL 服务器中另一个列值的条件返回更新的列值

Returning an updated column value based on the conditions of another column value in SQL Server

我有一个 table Referrals 包含这些列:

我需要编写代码来为推荐了两次以上的租户延长一个月的 valid_till 日期。引用的数量可以通过 referrer_id 列中特定数字 (profile_id) 的出现次数来计算(与配置文件 ID 相同)。下面两段代码正在单独完成它们的工作,但我不知道如何加入它们以获得所需的结果。

select DATEADD(mm, 1, valid_till)
from Referrals

select 
    [referrer_id(same as profile id)], 
    count([referrer_id(same as profile id)]) 
from referrals
group by [referrer_id(same as profile id)]
having count([referrer_id(same as profile id)]) > 2

您可以使用 in 运算符:

SELECT DATEADD(MM, 1, valid_till) 
FROM   referrals
WHERE  referrer_id IN (SELECT   referrer_id
                       FROM     referrals
                       GROUP BY referrer_id
                       HAVING   COUNT(*) > 2)

或者如果您确实需要更新 table 而不仅仅是查询添加的月份,您可以在 update 语句中使用相同的想法:

UPDATE referrals 
SET    valid_till = DATEADD(MM, 1, valid_till) 
WHERE  referrer_id IN (SELECT   referrer_id
                       FROM     referrals
                       GROUP BY referrer_id
                       HAVING   COUNT(*) > 2)

我想你可以使用 join 来做到这一点。但是,我不确定 table:

之间匹配的确切条件是什么
select DATEADD(month, 1, valid_till)
from Referrals r join
     (select [referrer_id(same as profile id)], count([referrer_id(same as profile id)]) 
      from referrals
      group by [referrer_id(same as profile id)]
      having count([referrer_id(same as profile id)]) > 2
     ) rr
     on rr.ref_id = [referrer_id(same as profile id)];