我有一个很大的Web记录表,其中包含log_instanceID,Log_id(唯一),Log_date,安全性和其他列(不重要)。我想删除相同Log_instanceID的所有行,希望实例至少具有一行Log_Info值不同于“ INFO”(即“警告”或“错误”)的实例。
SELECT COUNT(log_id) NoOfLogs, instance_id, severity, CAST(log_date AS DATE) log_date
FROM log
WHERE instance_id = '3B2D8B77-1D4E-40F8-A274-5A1372E9178C'
group by instance_id, severity, cast(log_date AS DATE)
结果-保持
NoOfLogs | instance_id | severity | log_date
---------- -------------- ---------- ----------
93 | 3B2D8B77-1D4E-40F8-A274-5A1372E9178C | **ERROR** | 2019-11-03
747 | 3B2D8B77-1D4E-40F8-A274-5A1372E9178C | INFO | 2019-11-03
SELECT COUNT(log_id) NoOfLogs, instance_id, severity, CAST(log_date AS DATE) log_date
FROM log
WHERE instance_id = 'C24CE96F-65F1-44CF-8D91-5939091AF8AB'
GROUP BY instance_id, severity, CAST(log_date AS DATE)
结果-删除
NoOfLogs | instance_id | severity | log_date
---------- -------------- ---------- ----------
3 | C24CE96F-65F1-44CF-8D91-5939091AF8AB | INFO | 2019-05-13
我只需要删除严重性为“ INFO”的所有实例。
如何仅提取仅包含信息日志的实例?
一个简单的解决方案是NOT EXISTS,使用关联子查询检查是否存在另一个严重性记录,然后针对同一实例ID检查“ INFO”。
DELETE FROM log
WHERE NOT EXISTS (SELECT *
FROM log x
WHERE x.instance_id = log.instance_id
AND x.severity <> 'INFO');
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。