2017-07-14 5 views
1

各ユニークビジネスユニットの最新のリクエスト番号を作成しようとしています。よりユニークな作成日があるため、ビジネスユニットがあるため、ビジネスユニットの列にユニークでないビジネスユニットが表示されます。私はすべての作成日を必要とせず、最新のものだけを作成します。T-SQL:ユニークでない結果を排除するためのクエリ

v2でCTEを見ると、CTEから返された値ごとに最新のCreateDateが必要です。

ご協力いただければ幸いです。

バージョン1:

SELECT 
    SQ.[Business Unit Impacted] [BU], 
    COUNT(RD.RequestID) [ReqCount], 
    (SELECT TOP 1 RD.CreateDate) [Create] 
FROM 
    REP_RequestData RD 
LEFT JOIN 
    REP_StandardQuestionResponses SQ ON SQ.RequestDataId = RD.Id 
WHERE 
    RD.ProductID = 'Firewall.Change.Request' 
GROUP BY 
    SQ.[Business Unit Impacted], RD.CreateDate 

バージョン2:

WITH D AS 
(
    SELECT 
     SQ.[Business Unit Impacted] [BU], 
     COUNT(RD.RequestID) [ReqCount] 
    FROM 
     REP_RequestData RD 
    LEFT JOIN 
     REP_StandardQuestionResponses SQ ON SQ.RequestDataId = RD.Id 
    WHERE 
     RD.ProductID = 'Firewall.Change.Request' 
    GROUP BY 
     SQ.[Business Unit Impacted] 
) 
SELECT 
    D.BU, 
    D.ReqCount, 
    (SELECT TOP 1 RD.CreateDate) [create] 
FROM 
    D 
LEFT JOIN 
    REP_StandardQuestionResponses SQ ON SQ.[Business Unit Impacted] = D.BU 
LEFT JOIN 
    REP_REQUESTDATA RD on SQ.RequestDataId = RD.Id 
WHERE 
    RD.ProductID = 'Firewall.Change.Request' 
GROUP BY 
    D.BU, D.ReqCount, RD.CreateDate 

答えて

0

私が正しく理解している場合、あなたはそれが唯一のBUによってグループ化の問題ですので、最新の日付を必要とmax(日付)を得る:

SELECT 
    SQ.[Business Unit Impacted] [BU], 
    COUNT(RD.RequestID) [ReqCount], 
    MAX(RD.CreateDate) [Create] 
FROM 
    REP_RequestData RD 
LEFT JOIN 
    REP_StandardQuestionResponses SQ ON SQ.RequestDataId = RD.Id 
WHERE 
    RD.ProductID = 'Firewall.Change.Request' 
GROUP BY 
    SQ.[Business Unit Impacted] 
+0

これは私が必要なものです。ありがとうございました!! – user3299464

0

はバージョン2では、制限する(上位1 RD.CreateDateを選択)あなたの副選択ステートメントの内側にwhere句を追加する必要がありますビジネスユニットへの戻りは、最新のCreateDateを取得するために、注文と一緒に同じ行に戻りました。ビジネスユニットに基づいた最新のCREATEDATEを返す必要があり

(select top 1 RD.CreateDate where RD.BU = D.BU order by RD.CreateDate desc) 

:それは下記のコードのようになります。