T-SQL:查询以消除非唯一结果

时间:2017-07-14 23:00:56

标签: sql-server tsql

我正在尝试为每个唯一业务部门选择最新请求#的创建日期。因为有更多独特的创建日期,所以有业务单位,我在业务单位列中获得非唯一业务单位。我不需要所有创建日期,只需要最新创建日期。

如果你看一下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

2 个答案:

答案 0 :(得分:0)

在版本2中,您需要在subselect语句中添加where子句(选择top 1 RD.CreateDate)以限制返回到同一行返回的业务单位以及获取最新CreateDate的顺序。它看起来像下面的代码:

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

这应该返回基于业务单元的最新CreateDate。

答案 1 :(得分: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]