我有一个要求,我必须在数据库中查询以下条件。
数据库[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
答案 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 =假。从这里开始,我认为很容易将其扩展到其他时间范围,并逐个客户评估他们所处的类别。
同样,我不确定你想要什么样的最终输出,但希望这是一个可以借给它的概念。