[TSQL]透過TSQL找出資料的前一筆及下一筆

[TSQL]透過TSQL找出資料的前一筆及下一筆

在實做內容管理系統或表單系統時,常會在顯示這筆資料的時候,
在畫面也會出現上一筆資料及下一筆資料,這邊就實做這段顯示怎麼處理,
每一個人用的方法不同,我這邊實做TSQL的方式,來直接找出目前資料的上一筆及下一筆,
這個實做範例是使用 Northwind 的 Orders  資料庫,
這個範例的使用環境限制是必須資料表中要有一個主鍵及發佈時間,
而TSQL查詢主要的三個步驟:
1.求出目前這筆資料的時間
2.使用時間來做比對,再透過排序的方式,來選出上一筆、下一筆資料
3.再將資料表連結起來(此步驟非必要步驟)

 


SELECT TOP 20 * FROM dbo.Orders

DECLARE @OrderID int
SET @OrderID = 10252

--1.求出目前這筆資料的時間
DECLARE @dt DateTime
SELECT @dt = OrderDate
FROM Orders
WHERE OrderID = @OrderID
--2.使用時間來做比對,再透過排序的方式,來選出上一筆、下一筆資料
SELECT  * FROM
(
-- 找出上一筆資料
SELECT Top 1 OrderID,OrderDate FROM Orders 
WHERE OrderDate >= @dt 
		AND OrderID != @OrderID
ORDER BY OrderDate ASC
)[Previous]
UNION
--3.再將資料表連結起來(此步驟非必要步驟)  
SELECT  * FROM
(
-- 找出下一筆資料
SELECT Top 1 OrderID,OrderDate FROM Orders 
WHERE OrderDate <= @dt 
		AND OrderID != @OrderID
ORDER BY OrderDate DESC
)[Next]

執行顯示結果如圖:
image


當然還有很多方法都能實做出來,透過TSQL直接查詢的方式,就能得到想要的結果。