SQL 根据多列删除行

SQL Delete Rows Based on Multiple Columns

我有一个 table 有八列,包括设备 ID、设备读取类型和设备读取日期。这三列看起来像这样: Example Table

我想做的是删除 DevReadType = XX 的每一行以及具有匹配 DevNum 但 DevReadDate 小于 DevReadType = 'XX' 时的日期的每一行。我还没有找到任何具有这种复杂条件的示例。将不胜感激!!

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

您可以先通过 运行 select 针对设备 table 测试您的 where 子句:

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

如果我理解正确的话,我会建议如下:

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')