首页 > 解决方案 > SQL查询,根据另一列最高值删除重复条目

问题描述

我正在从 SCOM SQL 服务器提取警报

我有一些关于警报重复的问题,因为每次警报状态发生变化(例如从新到确认),都会在数据库上创建一个具有相同 alert_id 的新条目。

所以我试图根据最高警报状态(0 表示新,100 确认,255 表示关闭)对这些警报 ID 进行重复数据删除。

前任:

row   alert_id                              alert_timeraised  ResolutionState
1     4B77E4A8-61F9-4696-A4C0-00076EDACCE7  2019-06-24        0
2     4B77E4A8-61F9-4696-A4C0-00076EDACCE7  2019-06-24        100
3     4B77E4A8-61F9-4696-A4C0-00076EDACCE7  2019-06-24        255
4     C6BF2104-767D-43E0-B356-000B30570312  2019-07-07        255
5     C6BF2104-767D-43E0-B356-000B30570312  2019-07-07        0

对于第 1 行和第 2 行(相同的 alert_id),我只想选择具有高“ResolutionState”值(255)的行

我试过的:

GROUP BY 语句(每次我得到不同的计数......)
SELECT UNIQUE(根本不工作)
WHERE with select

她是sql查询:

SELECT

Alert.vAlert.AlertGuid AS 'alert_id',
Alert.vAlertResolutionState.StateSetDateTime AS 'alert_timeraised', 
ResolutionState

FROM

Alert.vAlertDetail WITH (NOLOCK) 
INNER JOIN Alert.vAlert WITH (NOLOCK) ON Alert.vAlertDetail.AlertGuid = Alert.vAlert.AlertGuid 
INNER JOIN Alert.vAlertResolutionState ON Alert.vAlert.AlertGuid = Alert.vAlertResolutionState.AlertGuid

GROUP BY 
Alert.vAlert.AlertGuid,
Alert.vAlertResolutionState.StateSetDateTime,
Alert.vAlertResolutionState.ResolutionState

UNION

SELECT
Alert.vAlert.AlertGuid,
CONVERT(VARCHAR(50), Alert.vAlertResolutionState.StateSetDateTime, 20),
ResolutionState

FROM
Alert.vAlertDetail WITH (NOLOCK) 
INNER JOIN Alert.vAlert WITH (NOLOCK) ON Alert.vAlertDetail.AlertGuid = Alert.vAlert.AlertGuid
INNER JOIN Alert.vAlertResolutionState ON Alert.vAlert.AlertGuid = Alert.vAlertResolutionState.AlertGuid

GROUP BY
Alert.vAlert.AlertGuid,
Alert.vAlertResolutionState.StateSetDateTime,
Alert.vAlertResolutionState.ResolutionState

ORDER BY alert_id asc

如果您对此有任何建议,非常感谢..

标签: sqlsql-serverduplicates

解决方案


推荐阅读