0

在下面的查询中,我使用GROUP BY子句来获取最近更新的记录列表取决于更新日期。GROUP BY但是由于某些内部原因,我希望查询没有子句。可以请任何人帮我解决这个问题。

SELECT Proj_UpdatedDate,
       Proj_UpdatedBy
FROM   ProjectProgress PP
WHERE  Proj_UpdatedDate IN (SELECT MAX(Proj_UpdatedDate)
                            FROM   ProjectProgress
                            GROUP BY
                                   Proj_ProjectID)
ORDER BY
       Proj_ProjectID
4

1 回答 1

1

假设您的意思是 MAX(Proj_UpdatedDate),使用 TOP 1 应该会给您相同的结果:

SELECT Proj_UpdatedDate,
       Proj_UpdatedBy
FROM   ProjectProgress PP
WHERE  Proj_UpdatedDate IN (SELECT TOP 1 Proj_UpdatedDate
                            FROM   ProjectProgress
                            ORDER BY Proj_UpdatedDate DESC)
ORDER BY
       Proj_ProjectID

但是,您的查询实际上返回多个日期,因为它是 GROUPED BY Proj_ProjectId (每个项目的最大日期)。这是您想要的结果 - 显示项目更新的日期列表以及由谁更新?

如果是这样,请尝试使用 ROW_NUMBER():

SELECT  Proj_UpdatedDate, Proj_UpdatedBy
FROM (
   SELECT ROW_NUMBER() OVER (PARTITION BY Proj_ProjectID ORDER BY Proj_UpdatedBy DESC) rn,
      Proj_UpdatedDate, 
      Proj_UpdatedBy
   FROM   ProjectProgress
  ) t 
WHERE rn = 1

这是SQL Fiddle。这假定您正在运行 SQL Server 2005 或更高版本。

祝你好运。

于 2013-01-29T05:06:40.860 回答