3

どの列でもソートされていないテーブルがあります。現在の Id しか知らない場合、次/前のレコードを選択する方法はありますか? (私はmssqlを使用しています)

Id     Label     Date
---------------------
1      label1    2011-01-10
7      label2    2011-01-15 -- how to get previous?
5      label3    2011-01-12 -- I know id of this record
10     label10   2011-01-25 -- how to get next?
12     label8    2011-01-13
2      label5    2011-01-29

前もって感謝します!

4

3 に答える 3

3

どの列でもソートされていない場合、決定的な次または前のレコードはありません。ORDER BYSQL Server のデータには、句で指定された順序以外の順序はありません。

于 2012-09-27T12:38:33.653 に答える
2

同封したリストの前のものが本当に必要な場合は、次の方法があります。

declare @t table(Id int, Label varchar(10), Date date, s int identity(1,1))
insert @t (id, label, date) 
values(1,'label1','2011-01-10'),(7,'label2','2011-01-15'),
(5,'label3','2011-01-12'),(10,'label10','2011-01-25'),
(12,'label8','2011-01-13'),(2,'label5','2011-01-29')

--select the data with a self join

select t1.id as previous_id, t2.id, t2.Label, t2.Date, t3.id, t3.id as next_id
from @t t1
right join
@t t2 on t1.s + 1 = t2.s
left join
@t t3  on t2.s = t3.s - 1
于 2012-09-27T12:39:03.943 に答える