我正在尝试编写一个查询来识别在最后一天放弃购物车的订阅者,但我还需要一个计算字段来表示他们在过去7天内收到的天气和奖励。
我有以下表格
AbandonCart_Subscribers Sendlog
查询的第一部分很简单,在最后一天得到放弃
select a.* from AbandonCart_Subscribers
where DATEDIFF(day,a.DateAbandoned,GETDATE()) <= 1
这是我尝试计算奖励但我相当肯定它是不正确的,因为IncentiveRecieved总是0,即使我知道它不应该是......
select a.*,
CASE
WHEN DATEDIFF(D,s.SENDDATE,GETDATE()) >= 7
THEN 1
ELSE 0
END As IncentiveRecieved
from AbandonCart_Subscribers a
left join SendLog s on a.EmailAddress = s.EmailAddress and s.CampaignID IS NULL
where
DATEDIFF(day,a.DateAbandoned,GETDATE()) <= 1
这是一个关于对象和一些数据的SQL小提琴。我真的很感激一些帮助。
由于
答案 0 :(得分:0)
您可以使用条件设置变量:
select a.*,(DATEDIFF(D,s.SENDDATE,GETDATE()) >= 7) as `IncentiveRecieved `
from AbandonCart_Subscribers a
left join SendLog s on a.EmailAddress = s.EmailAddress and s.CampaignID IS NULL
where
DATEDIFF(day,a.DateAbandoned,GETDATE()) <= 1
这是你要找的吗?
答案 1 :(得分:0)
是不是应该小于7而不是大于7?
选择一个。*, 案件 WHATED DATEDIFF(D,s.SENDDATE,GETDATE())&lt; = 7 AND CampaignID不为null 然后1 ELSE 0 结束作为奖励获得 来自AbandonCart_Subscribers a 左连接SendLog s on a.EmailAddress = s.EmailAddress - and s.CampaignID IS NULL 哪里 DATEDIFF(day,a.DateAbandoned,GETDATE())&lt; = 1
希望这能满足您的需求。
答案 2 :(得分:0)
Kishore说的主要问题是它应该是&lt; = 7,而不是&gt; = 7。但是,还有另一个问题。
目前,您可以获得多个结果。如果同一个电子邮件地址不止一次,您不希望在SendLog上进行左连接。相反,您应该从该表中获得唯一的结果。有几种方法可以做到这一点;这是一种使用派生表的方法。我打电话给的表格将为您提供上周发送奖励的电子邮件的唯一列表。
select a.*,
CASE
WHEN s.EmailAddress is not null
THEN 1
ELSE 0
END As IncentiveRecieved
from AbandonCart_Subscribers a
left join (select distinct EmailAddress
from SendLog s
where s.CampaignID IS NULL
and DATEDIFF(D,s.SENDDATE,GETDATE()) <= 7
) s on a.EmailAddress = s.EmailAddress
where DATEDIFF(day,a.DateAbandoned,GETDATE()) <= 1