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')
我有一个 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')