Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL:用于消除非唯一结果的查询_Sql Server_Tsql - Fatal编程技术网

Sql server T-SQL:用于消除非唯一结果的查询

Sql server T-SQL:用于消除非唯一结果的查询,sql-server,tsql,Sql Server,Tsql,我正在尝试为每个唯一的业务部门选择最新请求的创建日期。因为创建日期的唯一性比业务单位的多,所以我在“业务单位”列中获得非唯一的业务单位。我不需要所有的创建日期,只需要最近的一个 如果您查看v2中的CTE,我需要从CTE返回的每个值的最新CreateDate 感谢您的帮助 第1版: SELECT SQ.[Business Unit Impacted] [BU], COUNT(RD.RequestID) [ReqCount], (SELECT TOP 1 RD.Crea

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

如果您查看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中,您需要在subselect语句select top 1 RD.CreateDate中添加where子句,以限制返回到同一行上返回的业务单元以及order by,以获取最新的CreateDate。它看起来像下面的代码:

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

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

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

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

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

如果我理解正确,您只需要最新的日期,因此只需按BU分组即可获得maxdate:

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]

如果我理解正确,您只需要最新的日期,因此只需按BU分组即可获得maxdate:

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]

这就是我需要的。非常感谢。这就是我需要的。非常感谢。