我有一个包含设备标识,设备读取类型和设备读取日期的八列的表。这三个栏是这样的: Example TableSQL删除基于多列的行
我想什么做的是删除每一行针对DevReadType = XX和每一行与匹配设备号,但一个DevReadDate小于日当DevReadType =“XX ”。我一直无法找到这种复杂条件的例子。帮助将不胜感激!
我有一个包含设备标识,设备读取类型和设备读取日期的八列的表。这三个栏是这样的: Example TableSQL删除基于多列的行
我想什么做的是删除每一行针对DevReadType = XX和每一行与匹配设备号,但一个DevReadDate小于日当DevReadType =“XX ”。我一直无法找到这种复杂条件的例子。帮助将不胜感激!
如果我理解正确的话,我会建议沿着线的东西:
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')
谢谢!这正是我需要的! – mdarr
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
感谢Max的回应,在我的表中有250万行,'XX'在DevReadType列中出现了12,000次。你知道是否有办法做到这一点删除使用变量,而不是指定确切的实例,需要删除? – mdarr
你的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/)了解如何提高您的问题质量并获得更好的答案。 –