为什么我的带有 OFFSET/FETCH 的 SQL 语句不起作用?

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 个命令返回完全相同的结果。

pap*_*zzo 8

如果 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)