Замена Ораклевого 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