Finding the top row of a range

  • Given the following table and data:

    declare @t table

    (

    FeeTable int,

    OffSet int,

    Amount decimal(13,2)

    );

    insert @t (FeeTable, OffSet, Amount) values

    (10,4,20.00),

    (10,3,65.00),

    (10,2,90.00),

    (10,1,135.00),

    (10,0,175.00),

    (11,4,10.00),

    (11,3,25.00),

    (11,2,30.00),

    (11,1,435.00),

    (11,0,575.00);

    It is trivial to return the correct row when the offset that is passed in is between 0 and 4 for a given FeeTable. I am having a hard time trying to return the largest offset in the range when the passed in offset is > 4.

    Thanks!

    __________________________________________________________________________________________________________
    How to Post to get the most: http://www.sqlservercentral.com/articles/Best+Practices/61537/

  • I'm taking a guess here, not sure if I completely understand the question, but if you just want for one specific FeeTable:

    SELECT TOP 1 OffSet, Amount

    FROM @t

    WHERE FeeTable = 10

    AND OffSet <= 5

    ORDER BY OffSet DESC;

    for all FeeTables:

    WITH getrank AS

    (SELECT FeeTable, OffSet, Amount, ROW_NUMBER() OVER (PARTITION BY FeeTable ORDER BY Offset DESC) AS ranking

    FROM @t

    WHERE OffSet <= 5)

    SELECT FeeTable, OffSet, Amount

    FROM getrank WHERE ranking = 1;

  • Chris Harshman (1/5/2017)


    I'm taking a guess here, not sure if I completely understand the question, but if you just want for one specific FeeTable:

    SELECT TOP 1 OffSet, Amount

    FROM @t

    WHERE FeeTable = 10

    AND OffSet <= 5

    ORDER BY OffSet DESC;

    That works well. I was missing the TOP and ORDER By clause!

    Thank-you!

    __________________________________________________________________________________________________________
    How to Post to get the most: http://www.sqlservercentral.com/articles/Best+Practices/61537/

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply