SQL Server 2005 imitate Oracle keep dense_rank

Замена Ораклевого keep dense_rank на SQL Server 2005
select max(m.id),
       m.someId keep (DENSE_RANK FIRST ORDER BY m.UpdateDate desc) 
from MyTable m 
group by m.someId
Исходные данные
id UpdateDate someId
1  20-01-2012 10
2  20-01-2012 10
3  01-01-2012 10
4  10-02-2012 20
5  01-02-2012 20
6  01-04-2012 30
Результат
2 10
4 20
6 30
И конечно это будет работать и на Оракле.
select m.*
from (select *, row_number() over (partition by m.someid ORDER BY m.UpdateDate desc, m.id desc) as seqnum
      from MyTable m
     ) m
where seqnum = 1
Результат,
группировки снаружи не нужно, группировка идет по окну over (partition by m.someid
max(m.id) заменен сортировкой в окне ORDER BY .... m.id DESC
id	UpdateDate	someId	seqnum
2	2012-01-20 00:00:00.000	10	1
4	2012-02-10 00:00:00.000	20	1
6	2012-04-01 00:00:00.000	30	1

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *