我正在跟踪订阅客户的动向。取消订阅时事通讯。所以基本上任何人都订阅,他的详细信息将填入SQL表以及订阅日期。如果同一用户取消订阅,则将插入新记录以及取消订阅日期。如果同一客户再次订阅,则会在表格中插入第三条记录。
我的表格中有一栏显示客户的最新状态,无论他是否订阅。棘手的部分是我只希望第三条记录中有“是”这个词。我想要做的是循环浏览我的所有记录&如果这是客户的最新记录,请标记“是”
谢谢
答案 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