ClaimID ClaimStatusCode StatusDate
11, Closed, 2010-05-10 12:19:00.000
11, Open, 2010-05-25 09:30:00.000
11, Closed, 2011-06-01 00:00:00.000
11, Open, 2011-06-10 00:00:00.000
22, Closed, 2011-03-14 00:00:00.000
22, Open, 2011-05-04 00:00:00.000
33, Closed, 2007-12-19 17:19:00.000
33, Open, 2007-12-24 12:07:00.000
**33, Open, 2008-09-08 15:36:00.000**
44, Closed, 2008-11-19 17:19:00.000
44, Open, 2008-12-24 12:07:00.000
44, Closed, 2009-07-28 15:36:00.000
对于任何ClaimID,如果打开声明状态,则不需要第二个打开状态行。这就是每次封闭都是由Open打开的。 这里为ClaimID 33的最后一行,StatusDate 2008-09-08 15:36:00.000不是必需的(加星标以供参考)。 我尝试使用rownumber函数,但没有运气。
答案应该是:
ClaimID ClaimStatusCode StatusDate
11, Closed, 2010-05-10 12:19:00.000
11, Open, 2010-05-25 09:30:00.000
11, Closed, 2011-06-01 00:00:00.000
11, Open, 2011-06-10 00:00:00.000
22, Closed, 2011-03-14 00:00:00.000
22, Open, 2011-05-04 00:00:00.000
33, Closed, 2007-12-19 17:19:00.000
33, Open, 2007-12-24 12:07:00.000
44, Closed, 2008-11-19 17:19:00.000
44, Open, 2008-12-24 12:07:00.000
44, Closed, 2009-07-28 15:36:00.000
答案 0 :(得分:1)
我使用Cross Apply
获取行的上一个状态,然后检查prev状态是否与当前状态相同:
delete ct
from
claimtest ct
cross apply (
select top 1 prevstatus = ClaimStatusCode
from claimtest sub
where ct.claimid = sub.claimid and sub.statusdate < ct.statusdate
order by statusdate desc
) p
where
ct.ClaimStatusCode = p.prevstatus
答案 1 :(得分:0)
SELECT
ClaimID, ClaimStatusCode, MIN(StatusDate)
FROM
Table
GROUP BY
ClaimID, ClaimStatusCode
HAVING
SUM(CASE claimID WHEN 'Open' THEN 1 ELSE -1 END) <= 1
编辑每个yoru评论 - 添加了HAVING条款
PS - 此选择为您获取“好”记录。如果你想改变它只获得“坏”记录(候选删除,我假设),然后使用MAX而不是MIN,并使用&gt;有条款中的1。