Query to Return Top Items for Each Distinct Column Value

前端 未结 3 1283
闹比i
闹比i 2021-01-25 09:07

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

相关标签:
3条回答
  • 2021-01-25 09:54

    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.

    0 讨论(0)
  • 2021-01-25 09:56

    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.

    0 讨论(0)
  • 2021-01-25 09:59
    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
    
    0 讨论(0)
提交回复
热议问题