【发布时间】:2016-05-21 10:01:31
【问题描述】:
我有这个表定义
CREATE TABLE [dbo].[Earnings](
[Name] [nvarchar](50) NOT NULL,
[Date] [datetime] NOT NULL,
[Earnings] [decimal](18, 2) NOT NULL
)
我有这个样本数据
INSERT INTO [dbo].[Earnings] ([name], [Date], [Earnings])
VALUES
('person1', datefromparts(2015, 9, 1), 9.01),
('person1', datefromparts(2015, 10, 5), 10.05),
('person1', datefromparts(2015, 11, 21), 11.21),
('person1', datefromparts(2016, 1, 11), 1.12),
('person1', datefromparts(2016, 3, 13), 3.13),
('person1', datefromparts(2016, 5, 15), 5.15),
('person2', datefromparts(2016, 6, 16), 6.16),
('person2', datefromparts(2016, 8, 18), 8.18)
当我进行分页时,我总是得到以下两个 sql 语句的相同结果,我想知道这个问题的原因是什么?有什么可能的方法来解决它?
SELECT * FROM [dbo].Earnings order by Name OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY ;
SELECT * FROM [dbo].Earnings order by Name OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY ;
两次执行的结果
Name Date Earnings
person1 2015-11-21 00:00:00.000 11.21
person1 2015-10-05 00:00:00.000 10.05
【问题讨论】:
-
排序依据应该是确定性的
-
按名称、日期使用顺序
-
如果您只按名称排序,SQL 可以选择它想要的具有该名称的前两行,并且不必每次都遵循相同的顺序。
标签: sql sql-server sql-server-2012 pagination