2016-03-08 75 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