How do I select last 5 rows in a table without sorting?

前端 未结 22 1203
-上瘾入骨i
-上瘾入骨i 2020-11-30 04:37

I want to select the last 5 records from a table in SQL Server without arranging the table in ascending or descending order.

相关标签:
22条回答
  • 2020-11-30 05:14

    When number of rows in table is less than 5 the answers of Matt Hamilton and msuvajac is Incorrect. Because a TOP N rowcount value may not be negative.
    A great example can be found Here.

    0 讨论(0)
  • 2020-11-30 05:17
    select * from table limit 5 offset (select count(*) from table) - 5;
    
    0 讨论(0)
  • 2020-11-30 05:19

    Last 5 rows retrieve in mysql


    This query working perfectly

    SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC
    

    or

    select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc
    
    0 讨论(0)
  • 2020-11-30 05:19

    Thanks to @Apps Tawale , Based on his answer, here's a bit of another (my) version,

    To select last 5 records without an identity column,

    select top 5 *, 
       RowNum = row_number() OVER (ORDER BY (SELECT 0))    
    from  [dbo].[ViewEmployeeMaster]
    ORDER BY RowNum desc
    

    Nevertheless, it has an order by, but on RowNum :)

    Note(1): The above query will reverse the order of what we get when we run the main select query.

    So to maintain the order, we can slightly go like:

    select *, RowNum2 = row_number() OVER (ORDER BY (SELECT 0))    
    from ( 
            select top 5 *, RowNum = row_number() OVER (ORDER BY (SELECT 0))    
            from  [dbo].[ViewEmployeeMaster]
            ORDER BY RowNum desc
         ) as t1
    order by RowNum2 desc
    

    Note(2): Without an identity column, the query takes a bit of time in case of large data

    0 讨论(0)
  • 2020-11-30 05:20

    i am using this code:

    select * from tweets where placeID = '$placeID' and id > (
        (select count(*) from tweets where placeID = '$placeID')-2)
    
    0 讨论(0)
  • 2020-11-30 05:21
    DECLARE @MYVAR  NVARCHAR(100)
    DECLARE @step  int
    SET @step = 0;
    
    
    DECLARE MYTESTCURSOR CURSOR
    DYNAMIC 
    FOR
    SELECT col FROM [dbo].[table]
    OPEN MYTESTCURSOR
    FETCH LAST FROM MYTESTCURSOR INTO @MYVAR
    print @MYVAR;
    
    
    WHILE @step < 10
    BEGIN   
        FETCH PRIOR FROM MYTESTCURSOR INTO @MYVAR
            print @MYVAR;
            SET @step = @step + 1;
    END   
    CLOSE MYTESTCURSOR
    DEALLOCATE MYTESTCURSOR
    
    0 讨论(0)
提交回复
热议问题