SQL查询帮助 - 根据MAX列获取记录

时间:2011-12-02 13:49:38

标签: sql sql-server sql-server-2005 tsql

对任何可以提供帮助的人。我不是T-SQL的专家所以我来这里是为了一些指导。我在SQL Server 2005中有一个表,其中每个记录都有一个修订号。我需要做的是显示表中只有最高版本号的所有记录。我已经研究了一段时间,并尝试使用MAX()和子查询。我也尝试过使用GROUP BY子句的HAVING语句。我一定不能正确使用这些。

值得注意的是,我在这个表中有很多列,但我为此示例删除了它。 GROUP BY是一个问题,因为我必须在子句中放置各种其他列(TEXT,NVARCHAR)。这导致我的记录计数发生变化。 以下是一些示例数据:

ID | RevisionNumber

0|0

0|1

0|2

1|0

1|1

1|2

1|3

1|4

以下是预期结果:

ID | RevisionNumber

0|2

1|4

我的SQL尝试:

SELECT
[ChangeRequests].[F0] AS [ID]
,MAX([ChangeRequests].[F8]) AS [RevisionNumber]
,[ChangeRequests].[F18] AS [ChangeNumber]
,CAST([ChangeRequests].[F19] AS NVARCHAR) AS [Synopsis]
,[ChangeRequests].[F30] AS [Responsibility]
,CAST([ChangeRequests].[F32] AS NVARCHAR) AS [Description]
,(CASE [ChangeRequests].[F42] WHEN 0 THEN NULL ELSE dbo.ConvertSTTimestamp([ChangeRequests].[F42]) END) AS [EnteredOn]
FROM [S37] AS [ChangeRequests]
GROUP BY 
[ChangeRequests].[F0]
,[ChangeRequests].[F18]
,CAST([ChangeRequests].[F19] AS NVARCHAR)
,[ChangeRequests].[F30]
,CAST([ChangeRequests].[F32] AS NVARCHAR)
,[ChangeRequests].[F42]

这是不起作用的查询。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

;WITH CTE
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY ID 
                                       ORDER BY RevisionNumber DESC) AS RN
         FROM   YourTable)
SELECT ID,
       RevisionNumber
       /*Other columns */
FROM   CTE
WHERE  RN = 1  

答案 1 :(得分:0)

现在,SQL Server聚合函数支持OVER和PARTITION BY子句

请尝试以下

select distinct ID, max(RevisionNumber) over (partition by ID)
来自SampleTable的