2011-07-26 57 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