私はこのテーブル定義を持っています
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)
ページネーションを行うと、次の2つの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
Order byは決定論的である必要があります。つまり、任意の列に同じ値が含まれ、order by句で使用される場合、SQLは任意の行を選択/選択できます。したがって、決定論的順序を作成するには、orderby列は一意である必要があります。
あなたの場合、使用
SELECT * FROM [dbo].Earnings order by Name,date OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY ;
SELECT * FROM [dbo].Earnings order by Name,date OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY ;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加