1

我正在尝试编写一个查询来识别我在最后一天放弃购物车的订阅者,但我还需要一个计算字段来表示他们在过去 7 天内收到的天气和奖励。

我有以下表格

AbandonCart_Subscribers 发送日志

第一部分查询很简单,最后一天得到弃子

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 小提琴。我真的很感激一些帮助。

谢谢

http://sqlfiddle.com/#!3/f481f/1

4

3 回答 3

0

Kishore 说得对,主要问题是它应该是 <=7,而不是 >=7。但是,还有另一个问题。

就目前而言,您可以获得多个结果。您不想在 SendLog 上进行左连接,以防同一个电子邮件地址不止一次出现。相反,您应该从该表中获得独特的结果。有几种方法可以做到这一点;这是一种使用派生表的方法。我称为 s 的表格将为您提供上周已发送激励的电子邮件的唯一列表。

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 
于 2013-08-27T21:17:31.153 回答
0

它应该不小于7而不是大于7吗?

选择 a.*, CASE WHEN DATEDIFF(D,s.SENDDATE,GETDATE()) <= 7 AND CampaignID 不为空 THEN 1 ELSE 0 END As IncentiveRecieved from AbandonCart_Subscribers a left join SendLog s on a.EmailAddress = s.EmailAddress - - 并且 s.CampaignID 为 NULL 其中 DATEDIFF(day,a.DateAbandoned,GETDATE()) <= 1

希望这能满足您的需要。

于 2013-08-27T20:37:04.007 回答
0

You can set a variable using a condition:

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 

Is this what you're looking for?

于 2013-08-27T19:14:56.230 回答