1. 程式人生 > >SQL 獲取下一條資料

SQL 獲取下一條資料

這裡假設有一張員工表,有三個欄位 (ID,員工姓名,年齡):

CREATE TABLE [dbo].[Employee]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Age] [int] NOT NULL
) ON [PRIMARY]

這裡插入六條資料:

INSERT INTO [Employee]([Name],Age) VALUES('張三',30);
INSERT INTO [Employee]([Name],Age) VALUES('李四',39);
INSERT INTO [Employee]([Name],Age) VALUES('王五',33);
INSERT INTO [Employee]([Name],Age) VALUES('趙六',23);
INSERT INTO [Employee]([Name],Age) VALUES('劉七',28);
INSERT INTO [Employee]([Name],Age) VALUES('李八',25);

以下方法都是需要使用到自動增長ID,即ID作為主鍵,使用ID排序來篩選資料。

 

步驟一 確定下一條資料

現在假設我們要取王五的後一條資料要怎麼取呢?第一步要先確定當前資料的後一條資料,一般來說,員工王五的後一條資訊應該是趙六,這是因為在SQL中預設可能會根據當前表的主鍵(一般是ID欄位)來進行升序排序,所以趙六就是王五的後一條資訊。

所以我們要根據欄位的排序先確定資料的前後關係,這裡我們使用預設的升序排序:

SELECT * FROM [Employee] ORDER BY ID ASC

可以看到趙六(ID為4)就是王五(ID為3)的後一條資料了

SQL獲取下一條資料

步驟二 獲取下一條資料(即後一條資料)

接下來就要取趙六這後一條資料了,趙六的ID為4,王五的ID為3,這裡有多種方法可以獲取到資料。

第一種方法,使用TOP方法和ID排序來過濾資料。先獲取當前資料的ID(即王五的ID),然後過濾出比當前ID大的所有資料(得到趙六、劉七和李八的資料),最後在取這些資料中最小ID的資料(通過升序排序取第一條資料),就是趙六(ID為4)的資料。具體資料的前後/上下順序還是要根據所定義的排序欄位來判斷!

情況1、根據員工的名字來查詢獲取當前資料ID:

SELECT TOP(1) * FROM [Employee]
WHERE ID>(SELECT ID FROM [Employee] WHERE [Name]='王五')
ORDER BY ID ASC

情況2、已經知道當前資料的ID,這裡王五ID為3:

SELECT TOP(1) * FROM [Employee]
WHERE ID>3
ORDER BY ID ASC

第二種方法,不使用TOP+ID排序,直接獲取下一條資料的ID來獲取資料。首先使用MAX函式查詢出下一條資料的ID,在通過最小ID獲取下一條資料的詳細資訊。

情況1、已知當前資料ID:

SELECT * FROM [Employee] WHERE ID=(SELECT MIN(ID) FROM [Employee] WHERE ID>3)

情況2、需要查詢出當前ID:

SELECT * FROM [Employee]
WHERE ID=
(
SELECT MIN(ID) FROM [Employee]
WHERE ID >(SELECT ID FROM [Employee] WHERE [Name]='王五')
)

 

出處:https://shiyousan.com/post/635448725069729413