SQL查询-获取最新版本

SQL查询-获取最新版本,sql,sql-server-2008,Sql,Sql Server 2008,我正在将T-Sql与SQLServer2008结合使用。假设我有父表: 项目: 和子表项目修订: 如何为每个项目提供最新的ProjectRevision?像这样: 假设ProjectRevID和DateCreated都在同一个方向上,即下一个版本接收到的ID高于上一个版本 从项目加入允许您访问项目中的其他列(如果需要)。无论ProjectRevId和DateCreated之间是否存在任何关系,下面的查询都会起作用 SELECT * FROM ProjectRevisions INNER JOIN

我正在将T-Sql与SQLServer2008结合使用。假设我有父表:

项目:

和子表项目修订:

如何为每个项目提供最新的ProjectRevision?像这样:

假设ProjectRevID和DateCreated都在同一个方向上,即下一个版本接收到的ID高于上一个版本


从项目加入允许您访问项目中的其他列(如果需要)。

无论ProjectRevId和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

您使用哪种SQL方言?严格来说,要获得显示的结果并不需要两个表。它只需要ProjectRevisions。他可能希望ProjectNam varchar出现在最终选择列表中。ProjectRevID在我的实际数据库中是一个GUID,因此MAXProjectRevID没有意义。谢谢你的帮助, ProjectRevID ProjectID DateCreated 11 1 10/15/2009 12 1 10/19/2009 13 1 10/25/2009 21 2 10/05/2009 ProjectRevID ProjectID DateCreated 13 1 10/25/2009 21 2 10/05/2009
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
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
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 )