查找同一客户的最新记录

时间:2016-08-27 14:39:13

标签: sql-server

我正在跟踪订阅客户的动向。取消订阅时事通讯。所以基本上任何人都订阅,他的详细信息将填入SQL表以及订阅日期。如果同一用户取消订阅,则将插入新记录以及取消订阅日期。如果同一客户再次订阅,则会在表格中插入第三条记录。

我的表格中有一栏显示客户的最新状态,无论他是否订阅。棘手的部分是我只希望第三条记录中有“是”这个词。我想要做的是循环浏览我的所有记录&如果这是客户的最新记录,请标记“是”

谢谢

4 个答案:

答案 0 :(得分:0)

您可以进行更新。像这样:

with toupdate as (
      select s.*,
             row_number() over (partition by customer_id order by date desc) as seqnum
      from subscriptions s
     )
update s
    set is_last_subscription = (case when seqnum = 1 and subscription_date is not null then 'YES' end);

但是,我猜你有一个客户/订阅者表,最好在需要时计算值或更新该表。

答案 1 :(得分:0)

update T
set Flag = 'Yes'
where not exists (
    select 1 from T t2
    where t2.CustomerId = T.CustomerId
        and t2.Timestamp > T.Timestamp
);

这是经典的基于集合的方法。它可以在没有窗口函数的平台上运行,并且可以避免更新中的from条款损坏。

答案 2 :(得分:0)

你可以试试类似的东西

127.0.0.1 mysuperlocal.company.com

答案 3 :(得分:0)

Update t set status = 
  case when z.LastSub >= z.LastUnSUb 
       then 'Yes' else 'No' end
From table t join
  (Select ClientID,
      Max(SubscriptionDate) LastSub,
      Max(UnsubscriptionDate) LasUnSub
   From table  
   Group by ClientID) z
 On z.ClientId = t.ClientId