2011-07-26 58 views
1
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
SELECT 
     ClaimID, ClaimStatusCode, MIN(StatusDate) 
    FROM 
     Table 
    GROUP BY 
     ClaimID, ClaimStatusCode 
    HAVING 
     SUM(CASE claimID WHEN 'Open' THEN 1 ELSE -1 END) <= 1 

编辑点评 - 增加了HAVING子句

PS - 这个选择得到你的 “良” 的记载为您服务。如果你想改变它只得到“坏”记录(我假设删除的候选者),那么使用MAX而不是MIN,并在having子句中使用> 1。

+0

如果只有它是那么容易。这不处理ClaimID = 11,它已被打开,关闭,然后再次打开。 –

+0

但它也删除了ClaimID 11的两条记录。 – Punia

+0

我看到了 - 然后使用HAVING子句找到具有太多“打开”状态的子句。顺便说一句 - 根据你给的例子,这看起来不太好,但我假设(你没有在你的例子中)每个索赔的第一个记录将是'开放'而不是'关闭'。 – Chains

1

我已经使用了Cross Apply以获取行以前的状态,然后检查当上一个状态是一样的当前状态:

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 
+0

是的,这对我有用。我还收到了一个声明ID 44(我刚刚编辑)的scenereo,并且您的代码也适用于此。 – Punia