2016-03-08 110 views
-3

我有一個包含設備標識,設備讀取類型和設備讀取日期的八列的表。這三個欄是這樣的: Example TableSQL刪除基於多列的行

我想什麼做的是刪除每一行鍼對DevReadType = XX和每一行與匹配設備號,但一個DevReadDate小於日當DevReadType =「XX 」。我一直無法找到這種複雜條件的例子。幫助將不勝感激!

+0

你的rdbms是什麼?向我們展示樣本數據和預期結果。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **]( http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)瞭解如何提高您的問題質量並獲得更好的答案。 –

回答

0

如果我理解正確的話,我會建議沿着線的東西:

DELETE d 
FROM device d 
JOIN (
    SELECT DevNum, MAX(DevReadDate) maxDevReadDate 
    FROM device 
    WHERE devReadType = 'xx' 
    GROUP BY DevNum 
) b 
ON d.DevNum = b.DevNum AND (d.DevReadDate < b.maxDevReadDate OR d.devReadType = 'xx') 
+0

謝謝!這正是我需要的! – mdarr

0
delete from device 
    where DevNum = @devicenum 
    and DevReadType = 'XX' 
    and DevReadDate < @date 

您可以先運行選擇againsr設備表測試你的where子句:

select * 
from device 
    where DevNum = @devicenum 
    and DevReadType = 'XX' 
    and DevReadDate < @date 
+0

感謝Max的迴應,在我的表中有250萬行,'XX'在DevReadType列中出現了12,000次。你知道是否有辦法做到這一點刪除使用變量,而不是指定確切的實例,需要刪除? – mdarr