如何实现SQl查询一定数量的语句?

秀小川 2012-07-05 12:37:55
标题说不太清楚,我有一个表table1 “time,value”只有这两列。如果我想实现如下功能,该如何查询?
如果记录条数小于100,则返回所有记录。若记录条数大于100,例如200,则隔一个取一条记录。
查询中我不知道有多少条结果,所以也不知道到底应该隔多少个取一个记录。
不知道这样可不可以用查询语句实现?
...全文
371 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
秀小川 2012-07-06
  • 打赏
  • 举报
回复

[Quote=引用 11 楼 的回复:]
引用这样在程序里面是可以实现,程序里面实现要比SQL查询快的多吗?至少能想到的SQL语句速度不会比程序快。

你的C代码,复杂度是 O, 但SQL语句实现的话,复杂度估计是 O3
[/Quote]
嗯,知道了,谢谢了!
筱筱澄 2012-07-05
  • 打赏
  • 举报
回复
declare  @a int
select @a=count(*) from tb
if @a<=100
select * from tb
else
select * from
(select *,row=row_number() over(order by id) from tb) where row%(@a/100)=1
筱筱澄 2012-07-05
  • 打赏
  • 举报
回复
declare  @a int
select @a=count(*) from tb
if @a<=100
select * from tb
else if @a>100
select * from
(select *,row=row_number() over(order by id) from tb) where row%(@a/100)=1
水族杰纶 2012-07-05
  • 打赏
  • 举报
回复
IF ( SELECT COUNT(*)
FROM table1
) < 100
SELECT *
FROM table1
ELSE
BEGIN
;
WITH tmp
AS ( SELECT * ,
rn = ROW_NUMBER() OVER ( ORDER BY GETDATE() )
FROM table1
)
SELECT *
FROM tmp
WHERE rn % 2 = 1
END
ACMAIN_CHM 2012-07-05
  • 打赏
  • 举报
回复
[Quote]这样在程序里面是可以实现,程序里面实现要比SQL查询快的多吗?[/Quote]至少能想到的SQL语句速度不会比程序快。

你的C代码,复杂度是 O, 但SQL语句实现的话,复杂度估计是 O3
秀小川 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

语句上可以实现,但效率极差!
建议还是直接在程序中实现。

比如在C语句中打开这个 select * from table1 ,可以先得到记录总数N,然后根据你的定义,算出间隔为或0,或1,或2。得到间隔X。
然后循环处理你的记录集,当 i++ % X ==0 的时候就输出记录即可。
[/Quote]
这样在程序里面是可以实现,程序里面实现要比SQL查询快的多吗?
ACMAIN_CHM 2012-07-05
  • 打赏
  • 举报
回复
语句上可以实现,但效率极差!
建议还是直接在程序中实现。

比如在C语句中打开这个 select * from table1 ,可以先得到记录总数N,然后根据你的定义,算出间隔为或0,或1,或2。得到间隔X。
然后循环处理你的记录集,当 i++ % X ==0 的时候就输出记录即可。
秀小川 2012-07-05
  • 打赏
  • 举报
回复
好吧 我移过来了!
  • 打赏
  • 举报
回复
Mysql的话建议你把帖子移到相应版块
秀小川 2012-07-05
  • 打赏
  • 举报
回复

IF ( SELECT COUNT(*)FROM table1) <= 100
SELECT * FROM table1


这样一句语句我觉得应该没问题吧,在Mysql里面执行不了,不知道什么情况!
秀小川 2012-07-05
  • 打赏
  • 举报
回复
我用的是Mysql 貌似declare在里面用不了!
感觉这边人多一点,所以在这边发帖了。
  • 打赏
  • 举报
回复

declare @Total int
select @Total=COUNT(1) from tb
if @Total<=100
begin
select * from tb
end
else
begin
;with t
(
select
px=row_number()over(order by (select 1)),
*
from
tb
)
select
[time],
value
from
t
where
px%2=1
end

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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