2013-12-02 3 views
1

У меня есть таблица с именем DynamicText со следующими полями: DynamicID, Content, Timestamp и DynamicTextEnum.Выберите верхний ряд из каждой группы

Я пытаюсь создать запрос, который выберет самую последнюю запись на основе 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 

Мой текущий просто SELECTS TOP 1 их на основе Enum и упорядочивает их в порядке DESC на основе Timestamp но это Безразлично Я работаю, когда мне нужны все перечисления. Есть идеи?

ответ

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 
0

Взгляните на этот вопрос и ответ:

Efficiently select top row for each category in the set

Вы можете сделать суб-запрос, чтобы получить пару перечисления/меток времени, и присоединиться, что с вашей полной строкой. Это предполагает, что у вас нет повторяющихся временных меток для любого указанного перечисления.

Смежные вопросы