计算30天未更新的行

时间:2018-12-11 14:40:55

标签: sql sql-server-2012

希望有人可以提供帮助。我有一张看起来像下面的桌子

CaseID      ClientID      ContactDate
23722         8283         01-JAN-2018
2322           233         04-FEB-2018
23382          833         06-FEB-2018
2324          8283         08-FEB-2018

我想要做的是创建一个存储过程,该存储过程包含一个名为@DT的参数(这将是指定的日期)。一旦运行,存储过程将为我提供ClientID参数前30天之前没有ContactDate的所有@DT的列表。这将称为contactflag。我还希望它再次检查表,以查看客户端在ContactDate参数之后的7天内是否有@DT,这将称为HadNextContact标志。基于为@DT分配了7 Feb 2018的日期,理想的输出看起来像这样;

 ClientID      ContactFlag      HadNextContact
 8283               1                1
 233                0                0
 833                0                0

{{1}的ContactFlag设置为1,因为在ClientID = 8283之前的30天内他们没有ContactDate7 Feb 2018标志也被设置为HadNextContact之后7天内的ContactDate

希望有人可以提供帮助?一如既往地感激!

杰西

2 个答案:

答案 0 :(得分:2)

您可以尝试将条件汇总函数与DATEDIFF函数一起使用。

SELECT ClientID,
       MAX(CASE WHEN DATEDIFF(DAY,ContactDate,@DT) > 30 THEN 1 ELSE 0 END) ContactFlag,
       MAX(CASE WHEN ContactDate BETWEEN @DT AND DATEADD(DAY,7,@DT) THEN 1 ELSE 0 END) HadNextContact
FROM T
GROUP BY ClientID

sqlfiddle

答案 1 :(得分:1)

尝试一下:

declare @dt datetime='20180207'

select
    c.ClientID,
    case
        when exists 
        (
            select 1 
            from ClientCaseHistory tb -- TableBefore
            where tb.ClientID=c.ClientID and tb.ContactDate between dateadd(day,-30,@dt) and @dt
        ) 
    then 0 else 1 end as ContactFlag,
    case
        when exists 
        (
            select 1 
            from ClientCaseHistory ta -- TableAfter 
            where ta.ClientID=c.ClientID and ta.ContactDate between @dt and dateadd(day,7,@dt)
        ) 
     then 1 else 0 end as HadNextContact
from 
    --Get all ClientIDs. Maybe you have a better table to do this, a client table?
    (
        select distinct ClientID 
        from ClientCaseHistory t
    )c