2017-07-17 9 views
0

クエリに関連する最大値を選択したいが、すべての結果が出てくる。何か案が ?パーティションの最大クエリ

QUERY

SELECT MAXRecID,MAXSetID,MAXRID,PreReifiedValue,ComplianceState 
FROM v_CI_CurrentComplianceStatus as A 
INNER JOIN v_CIRules as B 
ON B.CI_ID = A.CI_ID 
INNER JOIN v_R_System as C 
ON C.ResourceID = A.ItemKey 
INNER JOIN 
(SELECT PreReifiedValue,setting_CI_ID, 
     MAX(RecordID) AS MAXRecID, 
     MAX(SettingID) AS MAXSetID, 
     MAX(RuleID) AS MAXRID 
    FROM CI_CurrentRuleDetail 
    GROUP BY PreReifiedValue,Setting_CI_ID,instancedata 
) AS D 
ON D.Setting_CI_ID = A.CI_ID 
GROUP by MAXRecID,MAXSetID,MAXRID,PreReifiedValue,rulename,ComplianceState 

結果

MAXRecID   MAXSetID MAXRID PreReifiedValue ComplianceState 
72057594038117564 16780566 16780622 10    2 
72057594038117565 16780570 16780620  0    2 
+1

このクエリを試してみていますが、あなたの最終的に余分な列を得ました'GROUP BY'。 'rulename'を削除すると' DISTINCT'と同等です。 – dnoeth

+0

単純なルール:集計関数が含まれていない場合は、GROUP BYの代わりにSELECT DISTINCTを実行します。 – jarlh

答えて

0

私はあなたが実際に結果として何をしたいかわからない

SELECT 
     MAX(tmp.MAXRecID), MAX(tmp.MAXSetID), MAX(tmp.MAXRID), MAX(tmp.PreReifiedValue), MAX(tmp.ComplianceState) 
    FROM (
    SELECT MAXRecID,MAXSetID,MAXRID,PreReifiedValue,ComplianceState 
    FROM v_CI_CurrentComplianceStatus as A 
    INNER JOIN v_CIRules as B 
    ON B.CI_ID = A.CI_ID 
    INNER JOIN v_R_System as C 
    ON C.ResourceID = A.ItemKey 
    INNER JOIN 
    (SELECT PreReifiedValue,setting_CI_ID, 
      MAX(RecordID) AS MAXRecID, 
      MAX(SettingID) AS MAXSetID, 
      MAX(RuleID) AS MAXRID 
     FROM CI_CurrentRuleDetail 
     GROUP BY PreReifiedValue,Setting_CI_ID,instancedata 
    ) AS D 
    ON D.Setting_CI_ID = A.CI_ID 
    ) AS tmp 
    GROUP by tmp.MAXRecID, tmp.MAXSetID, tmp.MAXRID, tmp.PreReifiedValue, tmp.rulename, tmp.ComplianceState 
+0

ありがとうございます。メッセージ207、レベル16、状態1、行21 無効な列名 'rulename'。 – Ellefson

+0

rulenameは何か分かりませんが、inner selectで選択した後に 'rulename'を追加すると、エラーを解決すると思います。 @Ellefson –

+0

運がない、2行の代わりに342行が来る – Ellefson

関連する問題