日期:2014-05-17  浏览次数:20493 次

请教一个每月到期提醒的问题,头都晕了
有笔业务,有个开始日期(BeginDate)和截止日期(EndDate),然后每个月要根据截止日期的月和日提前七天进行发送短信提醒,一直到截止日期停止。

比如有笔业务是从:
2013-11-18至 2014-11-17
那么从下个月开始2013-12-10,2014-01-10,2014-02-10,2014-03-10…… 2014-11-10这样每个月找出来。

我现在是当月发送是没有问题,但是不知道怎么个循环提醒,头都搞大了。
 

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

我有新建了一个LastSendDate的字段,用来记录已发送日期,好不重复发送,但还是思路不清楚,控制不了


或者这样,建立一个要发送的消息表,里面先把结果存进去,然后通知了,就把记录删除,或者做一个删除表标记:


;with t
as
(
select 1 as number

union all

select number + 1
from t
where number <100
),

tb
as
(
select '2013-11-18' BeginDate,'2014-11-17' EndDate
)

select dateadd(day,-8,dateadd(month,number,BeginDate)) as 通知日期
from tb
inner join t
        on 1 = 1
where dateadd(day,-8,dateadd(month,number,BeginDate)) <=EndDate
/*
通知日期
2013-12-10 00:00:00.000
2014-01-10 00:00:00.000
2014-02-10 00:00:00.000
2014-03-10 00:00:00.000
2014-04-10 00:00:00.000
2014-05-10 00:00:00.000
2014-06-10 00:00:00.000
2014-07-10 00:00:00.000
2014-08-10 00:00:00.000
2014-09-10 00:00:00.000
2014-10-10 00:00:00.000
2014-11-10 00:00:00.000
*/


一定要建一个表么,建一个字段不行吗?


加个字段好像不行,你想,加一个字段,表示这个月已经发送了,那么这个月就不发送了,但是什么时候再开启这个标志呢?

这也是个麻烦的问题