Sql server T-SQL:用于消除非唯一结果的查询
我正在尝试为每个唯一的业务部门选择最新请求的创建日期。因为创建日期的唯一性比业务单位的多,所以我在“业务单位”列中获得非唯一的业务单位。我不需要所有的创建日期,只需要最近的一个 如果您查看v2中的CTE,我需要从CTE返回的每个值的最新CreateDate 感谢您的帮助 第1版: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
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]
这就是我需要的。非常感谢。这就是我需要的。非常感谢。