Mik*_*nes 1 sql t-sql sql-server
我正在使用 SQL Server,在表中Purchase我有大约 50 条记录。我试图获取前 20 个(0-20),然后是 20-40,最后是最后 10 个。
我拥有的 SQL 是:
SELECT *
FROM Purchase
WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
SELECT *
FROM Purchase
WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC
OFFSET 19 ROWS FETCH NEXT 20 ROWS ONLY
SELECT *
FROM Purchase
WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC
OFFSET 39 ROWS FETCH NEXT 20 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
前两个命令返回完全相同的记录。为什么他们没有显示两组不同的结果?
编辑:我知道XXinFETCH XX是要返回的行数。但是我的 SQL 服务器为上面的前 2 个命令返回完全相同的结果。
如果 PurchaseDate 不是唯一的,则该组中的订单不能保证重复。
将 ID 添加到排序以获得可重复的排序。
SELECT * FROM Purchase WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC, ID
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
SELECT * FROM Purchase WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC, ID
OFFSET 19 ROWS FETCH NEXT 20 ROWS ONLY
SELECT * FROM Purchase WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC, ID
OFFSET 39 ROWS FETCH NEXT 20 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)