select id,名称,标志 = (case when 是否回访 = 1 then '需要回访' else '不需要' end),是否已经回访=(case when isnull(b.id,0) >= 1 and 是否回访 = 1 then '已回访' when isnull(b.id,0) = 0 and 是否回访 = 1 then '待回访' else '不需回访' end) from 客户表 a left join 回访表 b on a.id = b.id and a.回访开始时间 <=b.回访时间 and dateadd(day,a.回访频率,a.回访开始时间) >=b.回访时间这是取的回访开始时间起第一个回访间隔的信息,要想算出所有回访频率内的相关信息,要循环更新回访开始时间取得(提示:先将 客户表信息放入临时表,取第一次后将结果放入另一结果临时表,更新回访开始时间为:dateadd(day,a.回访频率,a.回访开始时间)--循环之(注意当回访开始时间大于当前系统时间 得记录过滤掉))
select a.id, a.名称, case a.是否回访 when 0 then '不需要' when 1 then (case when b.客户id is null then '待回访' else '已回访' end) end as 回访状态 from 客户表 a left join 回访表 b on a.id = b.客户id and (b.回访时间 between a.回访开始时间 and dateadd(d,回访频率,回访开始时间))
抱歉,字段前望了加别名: select a.id,a.名称,标志 = (case when a.是否回访 = 1 then '需要回访' else '不需要' end),是否已经回访=(case when isnull(b.id,0) >= 1 and a.是否回访 = 1 then '已回访' when isnull(b.id,0) = 0 and a.是否回访 = 1 then '待回访' else '不需回访' end) from 客户表 a left join 回访表 b on a.id = b.id and a.回访开始时间 <=b.回访时间 and dateadd(day,a.回访频率,a.回访开始时间) >=b.回访时间我默认了 是否回访 字段,1为回访,0为不需要回访。 也没有测试,调试语法,算是提供一个思路吧,自己感觉比较笨,期待高人ing......
如果你是想列出当前时间所有客户是否需要回访和是否已经回访的清单可以这样: select aa.id,aa.名称,回访提示=(case when aa.是否回访 = 0 then '不需要' else (case when dateadd(day,aa.回访频率,aa.现回访开始时间) > getdate() then '已回访' else '待回访' end) end ),aa.回访频率 from (select a.id,a.名称,a.是否回访,现回访开始时间=(case when isnull(b.回访时间,a.回访开始时间)),a.回访频率 from 客户表 a left join (select id,max(回访时间) as 回访时间 from 回访表) b on a.id = b.id ) aa
--先查询出客户的 现回访开始时间 和客户的基本信息 条件是 回访表中有回访记录的最大那次如果没有则是 客户表的回访开始时间,这部分做结果记录集 作为表aa (select a.id,a.名称,a.是否回访,现回访开始时间=(case when isnull(b.回访时间,a.回访开始时间)),a.回访频率 from 客户表 a left join (select id,max(回访时间) as 回访时间 from 回访表) b on a.id = b.id ) aa --再根据 现回访开始时间 加上 回访频率 如果大于现在的系统时间 则表明其已回访,否则是在回访频率间隔内未回访的(其实是回访超时了不应该叫做“待回访”而是“回访超期”) --在这发现有点不对头了, 比较的应该是最后一次回访的上一次回访时间+回访频率 > 最后一次回访时间(这样的话就麻烦了) select aa.id,aa.名称, 回访提示=(case when aa.是否回访 = 0 then '不需要' else (case when dateadd(day,aa.回访频率,aa.现回访开始时间) > getdate() then '已回访' else '待回访' end) end ), aa.回访频率 from aa提示:”select id,max(回访时间) as 回访时间 from 回访表“ 语句可能可能要加"group by id"
a.id,
a.名称,
case a.是否回访
when 0 then '不需要'
when 1 then (case when b.客户id is null then '待回访' else '已回访' end)
end as 回访状态
from
客户表 a
left join
回访表 b
on
a.id = b.客户id
and
(b.回访时间 between a.回访开始时间 and dateadd(d,回访频率,回访开始时间))
select a.id,a.名称,标志 = (case when a.是否回访 = 1 then '需要回访' else '不需要' end),是否已经回访=(case when isnull(b.id,0) >= 1 and a.是否回访 = 1 then '已回访' when isnull(b.id,0) = 0 and a.是否回访 = 1 then '待回访' else '不需回访' end) from 客户表 a left join 回访表 b on a.id = b.id and a.回访开始时间 <=b.回访时间 and dateadd(day,a.回访频率,a.回访开始时间) >=b.回访时间我默认了 是否回访 字段,1为回访,0为不需要回访。
也没有测试,调试语法,算是提供一个思路吧,自己感觉比较笨,期待高人ing......
max(回访时间)
select aa.id,aa.名称,回访提示=(case when aa.是否回访 = 0 then '不需要' else (case when dateadd(day,aa.回访频率,aa.现回访开始时间) > getdate() then '已回访' else '待回访' end) end ),aa.回访频率
from (select a.id,a.名称,a.是否回访,现回访开始时间=(case when isnull(b.回访时间,a.回访开始时间)),a.回访频率
from 客户表 a left join (select id,max(回访时间) as 回访时间 from 回访表) b on a.id = b.id ) aa
讲一下这个sql语句就可以了:
查询所用客户,列出客户的回访时间基数。即没有回访记录的客户基数就是原来的“回访开始时间”,有回访记录的客户其基数为回访记录中最新的那个时间,不需要回访的客户基数可以为null。
(select a.id,a.名称,a.是否回访,现回访开始时间=(case when isnull(b.回访时间,a.回访开始时间)),a.回访频率
from 客户表 a left join (select id,max(回访时间) as 回访时间 from 回访表) b on a.id = b.id ) aa
--再根据 现回访开始时间 加上 回访频率 如果大于现在的系统时间 则表明其已回访,否则是在回访频率间隔内未回访的(其实是回访超时了不应该叫做“待回访”而是“回访超期”)
--在这发现有点不对头了, 比较的应该是最后一次回访的上一次回访时间+回访频率 > 最后一次回访时间(这样的话就麻烦了)
select aa.id,aa.名称,
回访提示=(case when aa.是否回访 = 0
then '不需要'
else
(case when dateadd(day,aa.回访频率,aa.现回访开始时间) > getdate() then '已回访' else '待回访' end)
end ),
aa.回访频率
from aa提示:”select id,max(回访时间) as 回访时间 from 回访表“ 语句可能可能要加"group by id"