私は答えがでないと考えていますです。 カウンタの例を検索すると、order by句がないと出力の順序が保証されないことが示されます。row_number()を使用して出力の順序に依存することができます
を考える:MS SQL Serverの2005年
create table #order (orderId int primary key clustered
, customerId int not null -- references customer(customerId)
, orderDateTIme datetime not null)
insert into #order values (1, 100, '2009-01-01')
insert into #order values (2, 101, '2009-01-02')
insert into #order values (3, 102, '2009-01-03')
insert into #order values (4, 103, '2009-01-04')
insert into #order values (5, 100, '2009-01-05')
insert into #order values (6, 101, '2009-01-06')
insert into #order values (7, 101, '2009-01-07')
insert into #order values (8, 103, '2009-01-08')
insert into #order values (9, 105, '2009-01-09')
insert into #order values (10, 100, '2009-01-10')
insert into #order values (11, 101, '2009-01-11')
insert into #order values (12, 102, '2009-01-12')
insert into #order values (13, 103, '2009-01-13')
insert into #order values (14, 100, '2009-01-14')
insert into #order values (15, 100, '2009-01-15')
insert into #order values (16, 101, '2009-01-16')
insert into #order values (17, 102, '2009-01-17')
insert into #order values (18, 101, '2009-01-18')
insert into #order values (19, 100, '2009-01-19')
insert into #order values (20, 101, '2009-01-20')
select * from #order
-- Results in PK order due to clustered primary key
select orderId, CustomerId, orderDateTime
, row_number() over (partition by customerId order by orderDateTime) RN
from #order
を、出力順序は、2つのプロパティがあります
行ごと
customerId
については、出力に 連続しています。Row_number()
は、それぞれ 以内に順次入力されます。
私の理解では、明示的なorder by節がなければ、これら2つのプロパティは保証されません。上記のプロパティが保持されていない例を探していますが、これはorder by節によって強制されませんが、MS SQL Serverの動作の結果にすぎません。必要に応じて、独自のテーブル定義、インデックスなどを自由に作成してください。
私が間違っている場合は、明示的なorder by節がなくても、これらの順序が保証されていることを示す参照へのリンク。
あなたの例を作成するためのスクリプトでは、誰もがそのようにしたいと思います! –