2013-05-22 2 views
1

У меня есть сценарий, в котором у меня три столбца в моей таблице. ID (String), Desc (string) TerminationDate, Last Update Date (Time). Первичного ключа нет, поэтому может быть несколько строк с одним и тем же набором данных, но LastUpdate Date всегда будет отличаться. Мне нужно написать SP, в котором мне нужно получить последний измененный результат (ID, Desc, дата завершения). см. пример нижевыбор всех значений в GroupBy

ID Desc TerminationDate LastUpdtDt 
A  test  01-01-2013  01-01-2013 
A  test1  01-03-2013  25-01-2013 
A  test  01-01-2013  26-03-2013 
B  test  01-01-2011  01-01-2013 

The result i shuld get is 
A  test  01-01-2013  26-03-2013 
B  test  01-01-2011  01-01-2013 

Сообщите мне, если вам нужна дополнительная информация.

ответ

1
SELECT ID, [DESC], TerminationDate, LastUpdtDt 
FROM 
     (
      SELECT ID, [DESC], TerminationDate, LastUpdtDt, 
        ROW_NUMBER() OVER(PARTITION BY ID 
        ORDER BY LastUpdtDt DESC) rn 
      FROM TableName 
     ) ss 
WHERE rn = 1 
+0

Thanks @JW. Он работает .. awesome .. –

+0

приветствуется ':)' –

1

Вы можете вернуть строки с max(LastUpdtDt) использованием подзапроса:

select t1.id, 
    t1.[desc], 
    t1.terminationdate, 
    t1.LastUpdtDt 
from yt t1 
inner join 
(
    select max(LastUpdtDt) LastUpdtDt, id 
    from yt 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.LastUpdtDt = t2.LastUpdtDt; 

См SQL Fiddle with Demo.

+0

Спасибо bluefeet. оцените усилия. –

0

SELECT ID , 
     DESC , 
     TERMINATION_DATE , 
     LAST_UPDATE 
FROM (SELECT ID , 
        DESC , 
        TERMINATION_DATE , 
        LAST_UPDATE , 
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY LAST_UPDATE DESC) SERIAL_ORDER 
      FROM  LAST_UPDATE 
     ) B 
WHERE SERIAL_ORDER = 1 

+0

Спасибо, бу, это похоже на ответ, отправленный JW. –

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