求查找最后一条记录的SQL语句

youzhj 2009-05-15 10:07:12
看过相关的帖子,但是没有发现写得明白的。
假如有一个表里面有时间字段Sdt,因为数据量太大,我想查看最后一条记录,应该是可以按照时间来查找的吧?请教给出一个例子,谢谢了!
还有假如没有时间字段,我想查询指定位置的记录,又改怎么查了?比如第10-20条,或者最后一条?(不用排序,需要结果顺序与原表中顺序一致)
...全文
1549 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
makeway 2010-03-06
  • 打赏
  • 举报
回复
很精彩,学习中……,1楼就很好用
doc_rao 2010-02-10
  • 打赏
  • 举报
回复
如果我同时要查找第一条和最后一条记录呢,有什么好的方法吗?
youzhj 2009-05-15
  • 打赏
  • 举报
回复
wufeng4552给的答案已经很详细,完全是我想要得答案,谢谢你了。
结果刚要结贴,又来了一个存储过程,谢谢你的热心,怪我分数给少了。
谢谢各位的无私奉献!
helinhai 2009-05-15
  • 打赏
  • 举报
回复
create PROCEDURE [dbo].[GetRecordFromPage]

@tblName varchar(255), -- 表名

@fldName varchar(255), -- 字段名

@PageSize int = 10, -- 页尺寸

@PageIndex int = 1, -- 页码

@OrderType bit = 0, -- 设置排序类型, 非0 值则降序

@IsCount bit = 0, -- 返回记录总数, 非0 值则返回

@strWhere varchar(2000) = '' -- 查询条件(注意: 不要加where)



AS



declare @strSQL varchar(6000) -- 主语句

declare @strTmp varchar(1000) -- 临时变量

declare @strOrder varchar(500) -- 排序类型



if @OrderType != 0

begin

set @strTmp = '<(select min'

set @strOrder = ' order by [' + @fldName + '] desc'

end

else

begin

set @strTmp = '>(select max'

set @strOrder = ' order by [' + @fldName +'] asc'

end



set @strSQL = 'select top ' + str(@PageSize) + ' * from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['

+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['

+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'

+ @strOrder



if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['

+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['

+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder



if @PageIndex = 1

begin

set @strTmp = ''

if @strWhere != ''

set @strTmp = ' where (' + @strWhere + ')'



set @strSQL = 'select top ' + str(@PageSize) + ' * from ['

+ @tblName + ']' + @strTmp + ' ' + @strOrder

end

if @IsCount != 0

set @strSQL = 'select count(' + @fldName + ') as Total from [' + @tblName + ']'

exec (@strSQL)
GO

看看这个存储过程可以满足你不?
JonasFeng 2009-05-15
  • 打赏
  • 举报
回复
1楼的正确,2楼的详细。
you_tube 2009-05-15
  • 打赏
  • 举报
回复
select top 1 from tab
水族杰纶 2009-05-15
  • 打赏
  • 举报
回复
--2參考
N-M条记录
1.
select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
set rowcount n
select * from 表变量 order by columnname desc


2.
select top n * from
(select top m * from tablename order by columnname) a
order by columnname desc


3.
如果tablename里没有其他identity列,那么:
select identity(int) id0,* into #temp from tablename

取n到m条的语句为:
select * from #temp where id0 >=n and id0 <= m

如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:
exec sp_dboption 你的DB名字,'select into/bulkcopy',true


4.
如果表里有identity属性,那么简单:
select * from tablename where identitycol between n and m
水族杰纶 2009-05-15
  • 打赏
  • 举报
回复
--1
SELECT TOP 1 * FROM TB ORDER BY SDT DESC

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧