使用n次从数据库获取数据

时间:2017-02-02 01:10:13

标签: sql exacttarget

我有一个要求,我必须在数据库中查询以下条件。

  

数据库[Report Pull]让我们说2列
  CustomerID ReportDt

我必须找到所有在过去30天内没有记录但完全记录(今天 - 30)以及其他条件的客户。

Select Condition on [Report Pull] PR
and cast(PR.ReportDt as Date) = cast(getdate()-30 as date)
and not exists (
                select   PR2.*
                from [Report Pull] PR2
                where 1=1
                and cast(PR2.ReportDt as Date) > cast(getdate()-30 as date)
                and PR2.CustomerId = PR.CustomerId
)

现在我想拉客户

cast(getdate()-30 as date) is mod30 = 0
AND at the same time
cast(PR2.ReportDt as Date) > cast(getdate()-30 as date)

Next 
cast(getdate()-60 as date) is mod30 = 0
AND at the same time
cast(PR2.ReportDt as Date) > cast(getdate()-60 as date)
that is no report pulled in last 60 days
每隔30天

等等。这是因为db可以有多个报告拉取记录。 我知道这有点令人困惑,但请帮助我。 :)

请注意我们不能在SQL中声明任何变量。 DB是Salesforce Marketing CLoud又名ExactTarget

1 个答案:

答案 0 :(得分:0)

我不是100%清楚你要做什么,但我认为你可以通过一次通过表(没有自我加入)来完成这个。我不是说自我加入是不好的,请注意。

考虑一下:

select
  CustomerID,
  max (case when cast(ReportDt as Date)=cast(getdate()-30 as date) then 1 else 0 end) EQ30,
  max (case when cast(ReportDt as Date)>cast(getdate()-30 as date) then 1 else 0 end) GT30,
  max (case when cast(ReportDt as Date)=cast(getdate()-60 as date) then 1 else 0 end) EQ60,
  max (case when cast(ReportDt as Date)>cast(getdate()-60 as date) then 1 else 0 end) GT60
from
  [Report Pull]
group by
  CustomerID

它应该会生成一个数据集:

Customer ID      30 Days ago?   Last 30 Days    60 Days ago?    Last 60 days
-----------      ------------   ------------    ------------    ------------

其中1 =真,0 =假。从这里开始,我认为很容易将其扩展到其他时间范围,并逐个客户评估他们所处的类别。

同样,我不确定你想要什么样的最终输出,但希望这是一个可以借给它的概念。