2016-03-14 83 views
-2

我想要表中的最後五條記錄。條件是列包含重複值和空值。從表中獲取最後五條記錄

CREATE TABLE [dbo].[Student] (
    [Student_Name] [VARCHAR](50) NULL 
) 

INSERT INTO Student 
VALUES 
     ('Mukesh') 
    , ('Vinod') 
    , ('Mukesh') 
    , (NULL) 
    , ('Shree') 
    , ('Raj') 
    , (NULL) 
    , ('Abhijit') 
    , ('Raju') 
    , ('Sharon') 
    , ('Ashok') 
    , ('Meena') 
    , ('Mukesh') 
    , (NULL) 

SELECT * FROM Student 

enter image description here

注:我想最近五個記錄從上面的表

結果這樣的: enter image description here

+4

你是如何定義的最後一個記錄? –

+1

如果沒有明確的'ORDER BY'子句,結果集的順序將不能保證。所以除非你指定哪一列定義_last records_,否則你在這裏得到的答案將不準確。 –

+0

最後一條記錄是整行數據的最後一行 – Surendra

回答

1
DECLARE @Student TABLE (Student_Name VARCHAR(50)) 

INSERT INTO @Student 
VALUES 
     ('Mukesh'), ('Vinod'), ('Mukesh'), (NULL) 
    , ('Shree'), ('Raj'), (NULL), ('Abhijit'), ('Raju') 
    , ('Sharon'), ('Ashok'), ('Meena'), ('Mukesh'), (NULL) 

SELECT TOP(5) Student_Name 
FROM (
    SELECT *, rn = ROW_NUMBER() OVER (ORDER BY 1/0) 
    FROM @Student 
) t 
ORDER BY rn DESC 
+3

這不保證始終返回相同的結果。 – FLICKER

+0

@FLICKER我知道......但是沒有'PK',OP會有什麼期待...... – Devart

+2

downvote原因:什麼閃爍寫道。 –

-4

使用DISTINCT從結果集刪除重複。 例如:

SELECT DISTINCT expressions 
FROM tables 
[WHERE conditions]; 

和使用LIMIT來限制結果數

+5

'LIMIT'是**不**是** Microsoft SQL Server **或標準ANSI/ISO SQL中的有效關鍵字/操作 - –

0
declare @c int 
set @c = (select COUNT(*) from Student) 
select * 
from 
(select ROW_NUMBER() over (order by student_id) as row, * 
from Student) t 
where t.row between (@c-5) and @c 

試試這一個。

更新:

declare @c int 
set @c = (select COUNT(*) from Student) 
select * 
from 
(select ROW_NUMBER() over(order by (select 1)) as row, * 
from Student) t 
where t.row between (@c-5) and @c 
+0

不工作。我沒有student_id學生表中的列 – Surendra

+0

更新新的查詢:) – ThanhPT

+0

謝謝....這也是可行的。 – Surendra

相關問題