1
我有一張表(條),它有10條記錄,我想得到最後四條記錄(第6,7,8,9號)沒有第10條。查詢也可以用於超過10條記錄,以獲得最後四行,而不是絕對最後一行。 在此先感謝!如何在SQL Server 2005中獲得(One Before Last)行
我有一張表(條),它有10條記錄,我想得到最後四條記錄(第6,7,8,9號)沒有第10條。查詢也可以用於超過10條記錄,以獲得最後四行,而不是絕對最後一行。 在此先感謝!如何在SQL Server 2005中獲得(One Before Last)行
在SQL中,表本質上是無序的。所以,讓我假設你有一個指定排序的列 - 一個id列,一個日期時間或類似的東西。
下你想要做什麼:
select top 4 *
from (select top 5 *
from Article a
order by id desc
) a
order by id asc
如果由於某種原因你沒有一個id,你可以把你的機會與下面的查詢:
select a.*
from (select a.*, row_number() over (order by (select NULL)) as seqnum,
count(*) over() as totcnt
from Article a
) a
where seqnum between totcnt - 5 and totcnt - 1
我想強調這不能保證工作。根據我的經驗,我已經看到seqnum的定義按順序將順序編號分配給行。但這不能保證工作,並可能無法在多線程環境中工作。但是,你可能會很幸運(特別是如果你的行適合一個數據頁面)。
順便說一句,你可以用同樣的想法與真正的列:
select a.*
from (select a.*, row_number() over (order by id) as seqnum,
count(*) over() as totcnt
from Article a
) a
where seqnum between totcnt - 5 and totcnt - 1
請出示你的表格佈局中,列名和類型。 –
有可能你陷入了[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。提供更多關於你想要實現的細節,可能有更好的解決方案。 –
...比直接根據您的要求。 –