2009-01-08 7 views
1

J'ai la déclaration SQL suivante. Je dois sélectionner le dernier enregistrement pour chaque System.ID utilisant le System.RevisedDateSQL Distinct par ID et date limite par défaut

SELECT  [System.Id],[System.RevisedDate], [System.Title], [System.State], [System.Reason], [System.CreatedDate], [System.WorkItemType], [System.TeamProject], 
         [Microsoft.VSTS.Scheduling.RemainingWork], [Microsoft.VSTS.Scheduling.CompletedWork], [Microsoft.VSTS.CMMI.Estimate] 
FROM   WorkItems 
WHERE  ([System.WorkItemType] = 'Change Request') AND ([System.CreatedDate] >= '09/30/2008') AND ([System.TeamProject] NOT LIKE '%Deleted%') AND 
         ([System.TeamProject] NOT LIKE '%Sandbox%') 

Pouvez-vous s'il vous plaît aider?

Répondre

3

Essayez ceci:

SELECT * FROM WorkItems w 
JOIN (
SELECT  [System.Id],MAX([System.RevisedDate]) 
FROM WorkItems 
WHERE ([System.WorkItemType] = 'Change Request') 
AND ([System.CreatedDate] >= '09/30/2008') 
AND ([System.TeamProject] NOT LIKE '%Deleted%') 
AND ([System.TeamProject] NOT LIKE '%Sandbox%') 
GROUP BY {System.Id] 
) x ON w.[System.Id] = x.[System.Id] AND w.[System.DateRevised] = x.[System.DateRevised] 
1

En général, il devrait aller quelque chose comme

SELECT ID,DATE_FIELD,FIELD1,FIELD2 
FROM TBL1 AS A WHERE DATE_FIELD >= ALL (
    SELECT DATE_FIELD FROM TBL1 AS B 
    WHERE A.ID = B.ID 
) 
1

ou (sous-requête en utilisant)

SELECT ID,DATE_FIELD,FIELD1,FIELD2 
FROM TBL1 T 
Where DATE_FIELD = 
    (Select Max(Date_Field) From Tbl1 
    Where Id = T.Id) 

mais je ne pouvais pas déchiffrer votre requête par exemple ... Est-ce "système" une table ? Pourquoi n'y a-t-il pas de références à WorkItem dans la clause Select? il ne semble pas empanner ensemble ...

0

Essayez

SELECT [System.Id],[System.RevisedDate], [System.Title], [System.State], [System.Reason], [System.CreatedDate], [System.WorkItemType], [System.TeamProject], 
[Microsoft.VSTS.Scheduling.RemainingWork], [Microsoft.VSTS.Scheduling.CompletedWork], [Microsoft.VSTS.CMMI.Estimate] 
FROM   WorkItems 
Left JOIN (Select [System.Id],Max([System.RevisedDate]) group by [System.Id]) LatestItems 
    on Workitems.[System.Id] = LatestItems.[System.Id] and 
    Workitems.[System.RevisedDate] = LatestItems.[System.RevisedDate] 
    WHERE  
([System.WorkItemType] = 'Change Request') AND ([System.CreatedDate] >= '09/30/2008') AND ([System.TeamProject] NOT LIKE '%Deleted%') AND 
          ([System.TeamProject] NOT LIKE '%Sandbox%') 
0

J'aime la réponse d'Alex, mais pensait que je jetterais dans une autre possibilité. Désolé, n'a pas eu l'occasion de le tester. :-)

SELECT  WorkItems.[System.Id], WorkItems.[System.RevisedDate], [System.Title], [System.State],  [System.Reason], [System.CreatedDate], [System.WorkItemType], [System.TeamProject], 
        [Microsoft.VSTS.Scheduling.RemainingWork], [Microsoft.VSTS.Scheduling.CompletedWork], [Microsoft.VSTS.CMMI.Estimate] 
FROM   WorkItems join (SELECT  [System.Id],max([System.RevisedDate]) [MaxDate] 
         FROM   WorkItems 
         WHERE  ([System.WorkItemType] = 'Change Request') AND ([System.CreatedDate] >= '09/30/2008') AND ([System.TeamProject] NOT LIKE '%Deleted%') AND 
         ([System.TeamProject] NOT LIKE '%Sandbox%') 
         group by [System.Id]) MaxDates 
on WorkItems.[System.Id] = MaxDates.[System.Id] 
and WorkItems.[System.RevisedDate] = MaxDates.[MaxDate] 
Questions connexes