从SQL Server中按键分组的TOP选择中删除最大值

时间:2014-01-06 23:02:16

标签: sql-server

为愚蠢的头衔道歉。我不确定如何描述这个问题。

我在SQL Server中有一个具有此结构的表;

ID                varchar(15)    
ProdDate          datetime    
Value             double

对于每个ID,可以有数百行,每行都有自己的ProdDate。 ID和ProdDate构成表格的唯一键。

我需要做的是根据ProdDate升序排序的前12个样本找到每个ID的最大值。

说另一种方式。对于每个ID,我需要找到该ID的12个最早日期(每个ID的抽样将在不同日期开始),然后找到这12个样本的最大值。

如果没有多个查询和临时表,如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用公用表格表达式和ROW_NUMBER在逻辑上定义TOP 12Id,然后MAX ... GROUP BY。{/ p>

;WITH T
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY Id ORDER BY ProdDate) AS RN
         FROM   YourTable)
SELECT Id,
       MAX(Value) AS Value
FROM   T
WHERE  RN <= 12
GROUP  BY Id