开发者社区> 问答> 正文

TSQL,除去具有相同instanceID的行的批处理,但具有特定条件的行除外

我有一个很大的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”的所有实例。

如何仅提取仅包含信息日志的实例?

展开
收起
祖安文状元 2020-01-05 14:36:35 343 0
1 条回答
写回答
取消 提交回答
  • 一个简单的解决方案是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');
    
    2020-01-05 14:36:45
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载