Как получить самые последние строки, когда все ключи разные? - PullRequest
2 голосов
/ 04 июня 2011

Я знаю, что об этом уже спрашивали, но не могу найти решение, которое подходит.

У меня есть эти данные:

Label           StartDate     ActivityKey
------------------------------------------------------------------
LABELS          2009-02-12    23D645CA-7F05-47FF-9AC4-1414DCBF44DD
LABELS          2010-11-01    C266A254-2A3D-4A37-8281-AE9EA08ED086
MASTER BOXES    2009-02-12    81DBEA52-B7BC-4861-96B4-7A77A2D7F07B
MASTER BOXES    2010-11-01    9DAD9F77-46FD-4694-9168-E4E5FE306B7D

Я хочу только самые последние длякаждый Label.Это желательно:

Label           StartDate     ActivityKey
------------------------------------------------------------------
LABELS          2010-11-01    C266A254-2A3D-4A37-8281-AE9EA08ED086
MASTER BOXES    2010-11-01    9DAD9F77-46FD-4694-9168-E4E5FE306B7D

Спасибо за любые советы

(Кстати, это SQL Server 2008)

Ответы [ 2 ]

8 голосов
/ 04 июня 2011
SELECT label, StartDate, ActivityKey
    FROM (SELECT label, StartDate, ActivityKey,
                 ROW_NUMBER() OVER (PARTITION BY label ORDER BY StartDate DESC) AS RowNum
              FROM YourTable
         ) t
    WHERE t.RowNum = 1

Тот же запрос также можно выполнить с помощью CTE :

WITH cteRowNum AS (
    SELECT label, StartDate, ActivityKey,
           ROW_NUMBER() OVER (PARTITION BY label ORDER BY StartDate DESC) AS RowNum
        FROM YourTable
)
SELECT label, StartDate, ActivityKey
    FROM cteRowNum
    WHERE RowNum = 1
1 голос
/ 04 июня 2011

Это тоже альтернатива ..:)

Select T.label, T.StartDate, T1.ActivityKey From
(
    Select label, Max(StartDate) as StartDate
    From YourTable
    Group By label
)T
Inner Join YourTable T1 on T1.Label = T.Label and T1.StartDate = T.StartDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...