【问题标题】:SQL Delete Rows Based on Multiple ColumnsSQL 基于多列删除行
【发布时间】:2016-03-08 18:26:42
【问题描述】:

我有一个包含八列的表,包括设备 ID、设备读取类型和设备读取日期。这三列如下所示: Example Table

我想要做的是删除 DevReadType = XX 的每一行以及匹配 DevNum 但 DevReadDate 小于 DevReadType = 'XX' 的日期的每一行。我还没有找到任何这种复杂条件的例子。非常感谢您的帮助!

【问题讨论】:

  • 你的 rdbms 是什么?向我们展示样本数据和预期结果。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。

标签: sql conditional sql-delete delete-row


【解决方案1】:

如果我理解正确,我会建议以下内容:

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

【讨论】:

  • 谢谢!!这正是我所需要的!
【解决方案2】:
delete from device
   where  DevNum = @devicenum
   and    DevReadType = 'XX'
   and    DevReadDate < @date

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

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

【讨论】:

  • 感谢 Max 的回复,在我的表中的 250 万行中,“XX”出现在 DevReadType 列中 12,000 次。您是否知道是否有一种方法可以使用变量而不是指定需要删除的确切实例来执行此删除操作?
猜你喜欢
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 2015-07-26
  • 2020-02-12
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多