这样的SQL语句如何分页?

nimeide1234567890 2015-03-16 01:43:08
这样的SQL语句如何分页?

下面一句SQL功能是:先按每个人的编号sUserCode分组,然后从每个人每天里选出最大时间dReadDateTime(dReadDateTime 每个人每天里的这个时间有重复的)的一条记录,那问题来了,如何分页呢?
select * from (select *,row_number() over(partition by sUserCode order by dReadDateTime desc) rn from tReadingDtl
where dReadDateTime between '" + lp.ReadDateTime + "' and '" + lp.ReadDateTime2 + "') t where t.rn <=1

还要和另外2个表联合查询:
left join b on a.sUserCode=b.sUserCode
left join c on a.sAreaNO = c.sAreaNO

还要模糊查询:
a.sAreaNO like '%" + lp.sAreaNO + "%'

数据库是SQL SERVER 2008
...全文
135 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-03-16
  • 打赏
  • 举报
回复
对于你慢不慢,我不清楚,对我以前的数据速度还行 看你的数据量及索引的设计了 你的数据结构设计成这样,对于你的需求,你只能这样查,用不用中间表都可以,我不觉得用临时表会比较快 可以贴下你的执行计划看下
nimeide1234567890 2015-03-16
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
SELECT * FROM(
	select *,ROW_NUMBER()OVER(ORDER BY sUserCode)ROW FROM
		(select *,row_number() over(partition by sUserCode order by dReadDateTime desc) rn
		from tReadingDtl 
		where dReadDateTime between '" + lp.ReadDateTime + "' and '" + lp.ReadDateTime2 + "')t
	where t.rn <=1
	)a
	left join  b on a.sUserCode=b.sUserCode
	left join  c on a.sAreaNO = c.sAreaNO
WHERE a.ROW BETWEEN 1 AND 10
类似这样
ROW_NUMBER()OVER 嵌套,这样很慢,楼上的有没有测试过
还在加载中灬 2015-03-16
  • 打赏
  • 举报
回复
SELECT * FROM(
	select *,ROW_NUMBER()OVER(ORDER BY sUserCode)ROW FROM
		(select *,row_number() over(partition by sUserCode order by dReadDateTime desc) rn
		from tReadingDtl 
		where dReadDateTime between '" + lp.ReadDateTime + "' and '" + lp.ReadDateTime2 + "')t
	where t.rn <=1
	)a
	left join  b on a.sUserCode=b.sUserCode
	left join  c on a.sAreaNO = c.sAreaNO
WHERE a.ROW BETWEEN 1 AND 10
类似这样

34,575

社区成员

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

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