Query to Return Top Items for Each Distinct Column Value

烈酒焚心 提交于 2019-12-02 04:58:42
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

For SQL 2000, I recommend upgrading to a supported platform.

But if you insist.

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

I think I understood you correctly, can you not select the max SomeTime and then group, like this:

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

I could be off the mark here, as I'm not entirely sure what you mean by latest.

Based on the this link (supplied as a comment to the original question). One soltion is:

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

Although I've prefer the accepted solution now.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!