2009-11-24 4 views
3

J'utilise T-Sql avec SQL Server 2008. Dire que j'ai table parent:requêtes SQL - Obtenez plus récente révision

Projets:

ProjectID ProjectNam 
1   Test Project 1 
2   Test Project 2 

et une table enfant de ProjectRevisions:

 
ProjectRevID ProjectID DateCreated 
11   1   10/15/2009 
12   1   10/19/2009 
13   1   10/25/2009 
21   2   10/05/2009 

Comment puis-je retrouver avec les plus récentes ProjectRevision pour chaque projet? Comme ceci:

 
ProjectRevID ProjectID DateCreated 
13   1   10/25/2009 
21   2   10/05/2009 
+0

quel dialecte SQL utilisez-vous? – pmarflee

+0

T-SQL avec SQL Server 2008 –

+0

Strictement parlant, pour obtenir le résultat affiché ne nécessite pas les deux tables. Cela nécessite seulement ProjectRevisions. –

Répondre

3

La requête ci-dessous fonctionnera indépendamment de toute relation entre ProjectRevId et DateCreated.

SELECT * 
FROM ProjectRevisions 
INNER JOIN (
    SELECT ProjectId 
    , MAX(DateCreated) AS DateCreated 
    FROM ProjectRevisions 
    GROUP BY ProjectId 
) AS CurrentRevision 
    ON CurrentRevision.ProjectId = ProjectRevisions.ProjectId 
    AND CurrentRevision.DateCreated = ProjectRevisions.DateCreated 
+0

Fonctionne parfaitement. +1 et merci! –

3
select x.mProjectRevID, p.ProjectID, p.ProjectNam, x.mDateCreated 
from Projects p 
inner join 
(
    select projectID 
    , max(ProjectRevID) as mProjectRevID 
    , max(DateCreated) as mDateCreated 
    from ProjectRevisions 
    group by ProjectID 
) x 
on x.projectID = p.ProjectID 

en supposant que ProjectRevID et DateCreated sont tous les deux « vont dans la même direction » à savoir la prochaine révision reçoit un identifiant plus élevé que le précédent.

L'association de projets vous permet d'accéder à d'autres colonnes de projets, le cas échéant.

+0

ProjectRevID, dans ma base de données actuelle, est un GUID, donc MAX (ProjectRevID) n'a pas de sens. Merci pour l'aide si, –

1
 
select ProjectRevID, ProjectID, DateCreated 
from Projects p 
    inner join ProjectRevisions 
    on ProjectRevisions.ProjectId = p.ProjectId 
where ProjectRevId = (
    select ProjecRevId 
    from ProjectRevisions 
    where ProjectId = p.ProjectId 
    order by DateCreated desc 
    limit 1 
) 
Questions connexes