凯锐

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  99 随笔 :: 39 文章 :: 251 评论 :: 25 引用
上周﹐被一位網友問到在sql2000中,想選取一張表的第N條記錄怎麼寫?(即如下語句select ID,Name,Title from WebSite order by ID desc 如何改寫以達到目的)
我當時直接就給他回
select ID,Name,Title from WebSite where ID= N
最后這位老兄說如果是ID是連續的話就可以,如果有記錄刪除的話,ID不連續了,就不行了 ,至此才明白他的真正意思。剛好要輪到公司的周會時間﹐于是想了一下。給出如下答案給他﹕

-- select top 1 [ID],[Name,Title from WebSite
-- where not  [ID] in (select top   11 [ID] from  WebSite order by [ID] asc)  order by [ID] asc
Declare @strSql Varchar(200),@intTopN int
Set @intTopN = 11
Set  @strSql = 'select top 1 [ID],[Name,Title from WebSite where not  [ID] in (select top  '+Cast(@intTopN  As Varchar(10))+'   [ID] from  WebSite order by [ID] asc)  order by [ID] asc'
Print @strSql
Exec(@strSql)

做完之后﹐總感覺應該會有更好的解決方案﹐可又一時想不出來!將其放在這里﹐供各位討論拍磚﹐如有最佳方案也請網友們不吝指教!


posted on 2006-09-11 15:27 凯锐 阅读(678) 评论(7)  编辑 收藏 所属分类: SQL Programing

评论

SELECT TOP 11 * FROM
(
SELECT Name,Title,
(SELECT COUNT(*) FROM WebSite WHERE id< w.id) AS c
FROM WebSite AS w
)
ORDER BY c

  回复  引用    

#2楼[楼主] 2006-09-12 09:13 精浪      
樓上的果然高明﹕按照那個網友的意思﹐我整理了一下﹕
SELECT * FROM
(
SELECT [ID], [Name],[Title]
(SELECT COUNT(*) FROM WebSite WHERE [ID]< w.[ID]) AS c
FROM WebSite AS w
) AS A WHERE c = 11 ORDER BY c ASC

Or
Declare @intTopN int
Set @intTopN = 12
SELECT * FROM
(
SELECT [ID], [Name],[Title]
(SELECT COUNT(*) FROM WebSite WHERE [ID]< w.[ID]) AS c
FROM WebSite AS w
) AS A WHERE c = @intTopN -1 ORDER BY c ASC

  回复  引用  查看    

select top 1 * from (
select top N ID,Name,Title from WebSite order by ID
) aa order by ID desc

  回复  引用    

請問一下,你寫的這段語句“
SELECT * FROM
(
SELECT [ID], [Name],[Title]
(SELECT COUNT(*) FROM WebSite WHERE [ID]< w.[ID]) AS c
FROM WebSite AS w
) AS A WHERE c = 11 ORDER BY c ASC

取得是第12筆的記錄而不是第11筆的吧?????

  回复  引用    

#5楼 2006-09-27 20:39 随风而去[匿名]
select * from mmst388 where inv_no=
(select max(t.inv_no) from
(SELECT top 20 inv_no
FROM mmst388 order by inv_no asc) as t)

  回复  引用    

#6楼 2006-10-12 11:25 Mr Gong[未注册用户]
select TOP 1* from
(SELECT top 20 *
FROM mmst388 order by inv_no asc) as t ORDER BY inv_no DESC

  回复  引用    

#7楼 2007-04-20 10:19 chris[未注册用户]
select * from tablename order by id limit n-1,1;这样就可以了,不用那么麻烦的
  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 501007




相关文章:

相关链接: