【发布时间】:2017-07-06 08:28:27
【问题描述】:
我有 SQL Server 2012 数据库,我需要查询数据库并获取与 MAX(Rule_ID) AND MAX(CI_ID) 相关的结果
但我无法获得与 MAX(CI_ID) 相关的结果,所有 CI_ID 版本都在结果中。
USE CM_T01
SELECT Max_id, MAX(CIVersion), Netbios_Name0, RuleName, RuleDescription, prereifiedvalue, complianceState
FROM v_CI_CurrentComplianceStatus
INNER JOIN
(
SELECT CI_ID,Rule_ID, Rulename, RuleDescription,criteria, MAX(Rule_ID) OVER(PARTITION BY Rulename) AS Max_id
from v_cirules
where rulename like '%Account lockout duration%' AND RuleDescription like '%applicable%'
group by Rule_ID,RuleName, RuleDescription,CI_ID,Criteria) as v_CIRules
ON v_CIRules.CI_ID = v_CI_CurrentComplianceStatus.CI_ID
INNER JOIN v_R_System
ON v_R_System.ResourceID = v_CI_CurrentComplianceStatus.ItemKey
LEFT JOIN v_CICurrentRuleDetail
ON v_CICurrentRuleDetail.CurrentComplianceStatusID = v_CI_CurrentComplianceStatus.CI_CurrentComplianceStatusID
where netbios_name0='TRISTSCCM-PS'
GROUP BY Netbios_Name0, RuleName, RuleDescription, prereifiedvalue, complianceState,v_cirules.CI_ID,v_CIRules.Max_id,Criteria
结果
Max_id (No column name) Netbios_Name0 RuleName RuleDescription prereifiedvalue complianceState
16780130 4 TRISTSCCM-PS OS Hardening: Account Lockout Policy - Account lockout duration Applicable /Account lockout duration Must equal to 10 NULL 1
16780130 8 TRISTSCCM-PS OS Hardening: Account Lockout Policy - Account lockout duration Applicable /Account lockout duration Must equal to 10 NULL 1
16780130 12 TRISTSCCM-PS OS Hardening: Account Lockout Policy - Account lockout duration Applicable /Account lockout duration Must equal to 10 NULL 1
【问题讨论】:
-
使用 with with ruleId = max(ruleid)
-
您在 2 个内连接后使用左连接,它会返回多行。尝试使用内部连接并尝试重新运行查询,或使用 row_num 函数返回最大行数
-
嗨,谢谢。当我删除第三个加入时,没有任何改变。
-
您好,您可以为所有表格发布一些示例数据,这样会有所帮助。如果不是,则在您的情况下,您将在特定组中采用最大规则 ID,因此将为多个组重复规则 ID。更好地获取最大规则 ID 并将其用于 CTE 的后续查询
-
您在这里有不同的
CIVersion值 - 如果您可以将这些汇总出来(如max(CIVersion) as CIVersion)并将其从group by子句中删除,那么您可能会得到正确的结果。
标签: sql sql-server sql-server-2012