标题说不太清楚,我有一个表table1 “time,value”只有这两列。如果我想实现如下功能,该如何查询?
如果记录条数小于100,则返回所有记录。若记录条数大于100,例如200,则隔一个取一条记录。
查询中我不知道有多少条结果,所以也不知道到底应该隔多少个取一个记录。
不知道这样可不可以用查询语句实现?

解决方案 »

  1.   

    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
      

  2.   

    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
      

  3.   

    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
      

  4.   


    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
      

  5.   

    我用的是Mysql 貌似declare在里面用不了!
    感觉这边人多一点,所以在这边发帖了。
      

  6.   


    IF ( SELECT COUNT(*)FROM table1) <= 100 
        SELECT * FROM table1
    这样一句语句我觉得应该没问题吧,在Mysql里面执行不了,不知道什么情况!
      

  7.   

    Mysql的话建议你把帖子移到相应版块
      

  8.   

    语句上可以实现,但效率极差!
    建议还是直接在程序中实现。比如在C语句中打开这个 select * from table1 ,可以先得到记录总数N,然后根据你的定义,算出间隔为或0,或1,或2。得到间隔X。
    然后循环处理你的记录集,当 i++ % X ==0 的时候就输出记录即可。
      

  9.   

    这样在程序里面是可以实现,程序里面实现要比SQL查询快的多吗?
      

  10.   

    本帖最后由 ACMAIN_CHM 于 2012-07-05 15:18:45 编辑