为愚蠢的头衔道歉。我不确定如何描述这个问题。
我在SQL Server中有一个具有此结构的表;
ID varchar(15)
ProdDate datetime
Value double
对于每个ID,可以有数百行,每行都有自己的ProdDate。 ID和ProdDate构成表格的唯一键。
我需要做的是根据ProdDate升序排序的前12个样本找到每个ID的最大值。
说另一种方式。对于每个ID,我需要找到该ID的12个最早日期(每个ID的抽样将在不同日期开始),然后找到这12个样本的最大值。
如果没有多个查询和临时表,如何做到这一点?
答案 0 :(得分:2)
您可以使用公用表格表达式和ROW_NUMBER
在逻辑上定义TOP 12
每Id
,然后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