我遇到的情况是,我需要在一段时间内找到从活动状态变为冻结状态的所有成员记录。问题是,成员可以多次更改状态。例如,成员可以在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')
答案 0 :(得分:1)
AND NOT EXISTS (
SELECT *
FROM
MEMBERCHANGES c2
WHERE
c2.memid = MEMBERCHANGES.memid AND
c2.datechange > MEMBERCHANGES.datechange
);