Consulta para devolver elementos principales para cada valor de columna diferente

Si tengo una tabla con los siguientes campos

ID, SomeFK, SomeTime 

¿Cómo escribiría una consulta para devolver los últimos / mejores 3 elementos (basados ​​en SomeTime ) para cada SomeFK ?

Entonces, el resultado puede parecerse

 SomeFK Sometime 0 2012-07-05 0 2012-07-04 0 2012-07-03 1 2012-07-03 1 2012-07-02 1 2012-07-01 2 2012-07-03 2 2012-07-02 2 2012-07-01 ....etc.... 

Devolver los últimos artículos para un SomeFK particular es fácil, pero simplemente no puedo pensar cómo hacerlo para lo anterior. ¡También siento que debería ser muy simple!

EDITAR:

Disculpas, me perdí un poco de información key. esto es para SQL2000, entonces ROW_NUMBER() no se puede usar!

 SELECT SomeFk, SomeTime FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY SomeFK ORDER BY sometime desc) rn FROM yourtable ) v WHERE rn<=3 ORDER BY somefk, rn 

Para SQL 2000, recomiendo actualizar a una plataforma compatible.

Pero si insistes

 select * from yourtable t1 where (select COUNT(*) from yourtable where somefk = t1.somefk and sometime>=t1.sometime ) <=3 

Creo que te entendí correctamente, ¿no puedes seleccionar el max SomeTime y luego agrupar, como este:

 select SomeFK, max(SomeTime) from Table group by SomeFK 

Podría estar fuera de lugar aquí, ya que no estoy del todo seguro de a qué te refieres con lo último.

Basado en este enlace (proporcionado como comentario a la pregunta original). Una solución es:

 SELECT DISTINCT ID, SomeFK, SomeTime FROM SomeTable t1 WHERE ID IN (SELECT TOP 3 ID FROM SomeTable t2 WHERE t2.SomeFK= t1.SomeFK ORDER BY SomeTime DESC) ORDER BY SomeFK, SomeTime DESC 

Aunque prefiero la solución aceptada ahora.