2017-07-14 65 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分組的問題,並獲得最大(日)的最新日期:

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版,您需要添加子查詢語句中where子句(選擇頂部1 RD.CreateDate)限制返回到業務部門的同一行返回,並通過訂單獲取最新的CreateDate。它看起來像下面的代碼:

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

這應該返回基於業務單位的最新CreateDate。