从每个组中选择顶行

时间:2013-12-02 18:43:02

标签: sql-server

我有一个名为DynamicText的表格,其中包含以下字段:DynamicIDContentTimestampDynamicTextEnum

我正在尝试设计一个查询,该查询将根据Timestamp从按DynamicTextEnum分组的每个组中选择最新记录。

例如:

Enum    Timestamp
-----------------
1       1/10/2012
1       2/10/2012
2       1/10/2012
3       3/10/2012
2       3/10/2012
3       4/10/2012

所以结果如下:

Enum    Timestamp
-----------------
1       2/10/2012
2       3/10/2012
3       4/10/2012

我目前根据Enum简单SELECTS TOP 1他们,并根据DESC顺序命令他们 Timestamp但是当我需要所有枚举时它不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DynamicTextEnum ORDER BY Timestamp DESC) AS rn
   FROM DynamicText
)
SELECT *
FROM cte
WHERE rn = 1

答案 1 :(得分:0)

看看这个问题并回答:

Efficiently select top row for each category in the set

您可以执行子查询以获取枚举/时间戳对,并将其与整行连接。假设您没有任何给定枚举的重复时间戳。