If I have a table with the following fields
ID, SomeFK, SomeTime
How would I write a query return the latest/top 3 items (based on SomeTi
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.
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.
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