尝试选择最大值时如何正确分组?

时间:2016-03-04 20:18:27

标签: sql sql-server sql-server-2008

我目前有这个查询:

SELECT	[Description]  
		 ,[Inspection_No]
		 ,[InspectionSpecification_No]
		 ,[Description]
		 ,[Class]		    
		 ,[Notes]     
		 ,[InspectionDate]      		       
		 ,[Job]     
		 ,[Lot]     		  
		 ,[Result]         
		 ,[CreateDate]      		  
		 ,[SampleNumber]
		FROM	
			(SELECT     
			  [Inspection_No]
			 ,[InspectionSpecification_No]
			 ,[Description]
			 ,[Class]		    
			 ,[Notes]     
			 ,[InspectionDate]      		       
			 ,[Job]     
			 ,[Lot]     		  
			 ,[Result]         
			 ,[CreateDate]      		  
			 ,[SampleNumber]
			 ,ROW_NUMBER() OVER (partition BY [Lot], [Description], [SampleNumber]
			 ORDER BY [InspectionDate] DESC) rn

	FROM      [A].[dbo].[PT_Inspection]) tmp

	WHERE     rn = 1 AND [Lot] IS NOT NULL AND ([InspectionDate] > DATEADD(DAY, - 600, GETDATE())) and [Lot] = @LotNumber and [Job] is not null and Job != ''

哪个效果很好。它带来了我需要的所有数据。我想将这些数据限制为每个[描述]的最高[SampleNumber]。我一直试图将它全部插入临时表中,但我似乎无法弄清楚如何。如果我设法将它全部放入temptable然后调用它,我将如何为每个[Description]返回最高[SampleNumber]的所有数据列。我还在学习SQL和StackOverflow的新手,所以如果我需要包含任何进一步的信息,请告诉我。 谢谢!

1 个答案:

答案 0 :(得分:2)

如果您想要每个描述的最高样本编号,那么只需更改row_number()中的分区/排序条款:

ROW_NUMBER() OVER (PARTITION BY [Description]
                   ORDER BY [SampleNumber] DESC, [InspectionDate] DESC
                  ) rn