SQL逻辑 - 记录字段已更改,但自

时间:2016-01-26 17:29:31

标签: sql sql-server reporting-services

我遇到的情况是,我需要在一段时间内找到从活动状态变为冻结状态的所有成员记录。问题是,成员可以多次更改状态。例如,成员可以在6月1日将其状态从活动状态更改为冻结状态。然后在9月1日恢复活动状态,然后在12月1日恢复冻结状态。我正在尝试运行查询以识别从6月冻结的所有成员1仍然被冻结,但没有改变它们之间的状态。

我所拥有的代码可以识别所有人,但不会消除多次更改的人。

我到目前为止的代码是:

SELECT 
    MEMBERUDFS.memid, MEMBERUDFS.udfid, MEMBERUDFS.udfvalue,  
    MEMBERUDFSETUPS.udflabel, 
    MEMBERS.lname, MEMBERS.fname, MEMBERTYPES.description, 
    SITES.sitename, MEMBERS.status, 
    MEMBERCHANGES.datechange, MEMBERCHANGES.newvalue, 
    MEMBERCHANGES.columnname
FROM 
    MEMBERUDFS 
INNER JOIN 
    MEMBERUDFSETUPS ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
INNER JOIN 
    MEMBERS ON MEMBERUDFS.memid = MEMBERS.memid 
INNER JOIN 
    MEMBERTYPES ON MEMBERS.mtypeid = MEMBERTYPES.mtypeid 
INNER JOIN 
    SITES ON MEMBERS.siteid = SITES.siteid 
INNER JOIN 
    MEMBERCHANGES ON MEMBERS.memid = MEMBERCHANGES.memid
WHERE 
    (MEMBERUDFSETUPS.udflabel = 'Freeze Reason') 
    AND (MEMBERUDFS.udfvalue = 'Medical') 
    AND (MEMBERS.status = 'F') 
    AND (MEMBERS.siteid = '777') 
    AND (MEMBERCHANGES.columnname = 'status') 
    AND (MEMBERCHANGES.newvalue = 'F') 
    AND (MEMBERCHANGES.datechange BETWEEN '2015-07-01' AND '2015-12-31')

1 个答案:

答案 0 :(得分:1)

AND NOT EXISTS (
SELECT *
FROM
MEMBERCHANGES c2
WHERE
c2.memid = MEMBERCHANGES.memid AND
c2.datechange > MEMBERCHANGES.datechange
);