2017-07-14 1 views
1

J'essaie de sélectionner la date de création du # de demande le plus récent pour chaque unité commerciale unique. Comme il y a plus de dates de création uniques que d'unités commerciales, j'obtiens des unités commerciales non uniques dans la colonne de mon unité commerciale. Je n'ai pas besoin de toutes les dates de création, juste la plus récente.T-SQL: Requête pour éliminer les résultats non uniques

Si vous regardez le CTE en v2, je veux le plus récent CreateDate pour chaque valeur retournée par le CTE.

Toute aide est appréciée.

Version 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 

Version 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 

Répondre

0

si je comprends bien vous avez besoin que la dernière date d'il est une question de regroupement que par BU et obtenir le maximum (date):

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

C'est ce que je avais besoin. Je vous remercie!! – user3299464

0

Dans la version 2, vous devez ajouter une clause where à l'intérieur de votre déclaration de subselect (sélectionner top 1 RD.CreateDate) pour limiter le retour à l'unité commerciale retourné sur la même ligne avec une commande pour obtenir le dernier CreateDate. Il ressemblerait à quelque chose comme le code ci-dessous:

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

Cela devrait renvoyer la dernière CreateDate basée sur la Business Unit.