在數據庫中有一數據表Student,字段有StudentID,StudentName,ClassID,其中StudentID并不是連續的編號,現在的任務是查詢出指定范圍內的數據,比如想要查詢第五條數據和第十條數據。如果StudentID為連續的編號,那么這個任務會簡單些。對于不連續的編號,
在數據庫中有一數據表Student,字段有StudentID,StudentName,ClassID,其中StudentID并不是連續的編號,現在的任務是查詢出指定范圍內的數據,比如想要查詢第五條數據和第十條數據。如果StudentID為連續的編號,那么這個任務會簡單些。對于不連續的編號,我們可以使用Row_Number函數,使用該函數對數據行進行排序,然后根據生成的排序號對數據進行篩選。
具體的步驟為:
1.首先使用Row_Number函數對數據添加排序
select StudentID,StudentName,ClassID,Row_Number() OVER(Order by StudentID) AS 'RowNumber'
from Student
注意這里的Row_Number函數必須要有Order By字段,Partition By字段可選。這一步完成之后,就會增加一列“RowNumber”,為連續的。
2.使用第一步產生的表作為基表,虛擬主機,結合Between..And..函數來完成對指定范圍內的數據進行查詢
select *
from(select StudentID,StudentName,ClassID,服務器租用,Row_Number() OVER(Order by StudentID) AS 'RowNumber'
from Student
) as OrderStudent
where RowNumber between 5 and 10
通過這個步驟會查詢出經過排名之后的第五到第十(包括第五和第十)條數據。
根據上面的分析,我們可以很容易擴展,假如我要查詢每個分組的前N項數據行:使用Row_number的pattition by字段對數據進行分組,并排名,挑選出每組排名小于N的數據行即可。
具體的SQL語句為:
select * from (select *,Row_Number() OVER (Partiton By ClassID Order by StudentID) as "RowNumber") as OrderedData
where RowNumber 首先對數據表進行分組并對每一個小組進行排名,虛擬主機,然后選擇每個小組中排名小于指定的N即可。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com