表logevent 
字段logid 主键
ToUserId
LogTypeId
LogTime
UserId
Notes表fuser
id主键
FriendId
UserId要求查询表logevent useid在表fuser中的,并且根据logtime 排序,把logtime大的分组排列。
我写的如下。现在问题怎么实现分页?
select  top 10 userid from logevent where logid in(
select max(logid) from logevent group by userid 
)
and userid in (
select friendid as userid from fuser where userid='38'

and ( touserid='38' or touserid is null )order by logtime desc

解决方案 »

  1.   

    --游标不是明智的选择,在小数据量时可以使用
    create   procedure hahaha 
      @sqlstr nvarchar(4000), --查询字符串 
      @currentpage int, --第N页 
      @pagesize int --每页行数 
      as 
      set nocount on 
      declare @P1 int, --P1是游标的id 
      @rowcount int 
      exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output 
      select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
      set @currentpage=(@currentpage-1)*@pagesize+1 
      exec sp_cursorfetch @P1,16,@currentpage,@pagesize   
      exec sp_cursorclose @P1 
      set nocount off 
      
     --测试: 2 代表第二页  ,10  每页10条
    exec hahaha '任何条件的SQL语句',2,10