请问用order by rnd(id)随机抽取记录时,每次相同
用order by rnd(id)随机抽取记录时
每次抽出的结果相同,查了有关资料,说是计算机给出的是伪随机数
需要初始化种子数但不知道在sql语句中如何初始化,望高手指教语句用的是:select top 5 from ^^^^^^^^^^^^^order by rnd(id)

解决方案 »

  1.   

    通常用 RAND 生成随机数的方法是,用相对不定的某个值作为种子值,例如累加 GETDATE 的几个部分:SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
               + (DATEPART(ss, GETDATE()) * 1000 )
               + DATEPART(ms, GETDATE()) )使用基于 GETDATE 的算法生成种子值时,如果在算法中所用的最小 datepart 的时间间隔内多次调用 RAND,RAND 仍会生成重复值。如果对 RAND 的调用包括在单个批处理中,尤其可能出现这种情况。在单个批处理中对 RAND 的多次调用可在同一毫秒(DATEPART 的最小增量)内执行。这种情况下,请用基于除时间之外的值以生成种子值。上面的代码在SQL Server 2000中执行
      

  2.   

    如果是Sql Server的话用order by newid()
      

  3.   

    使用rnd()函数钱 给个随机种子先
    加上vba.randomize 再试试
      

  4.   

    谢谢大家我用的是access我试过vba.randomize,还是不行,请问加在哪里呀?
    这样?  VBA.Randomize
            rs.Open str, CN, adOpenDynamic, adLockReadOnly
    还是这样?
     str1 = "select * from (select top " + b + " * from expert where 所属城市 in (" + Text11.Text + ") and 从事专业 like '%:" + Text1.Text + ":%' order by "
      VBA.Randomize
      str1 = str1 + "rnd(id)"
      str1 = str1 + ")"
      

  5.   

    ACCESS就没有办法这样子随即排序了rnd()是在SQL语句查询前生成的,所以取出的值对每一条记录而言当然是一样的只能通过另外途径进行排序详见http://www.4guysfromrolla.com/webtech/102999-1.shtml
      

  6.   

    或者增加一个sort字段,每次查询前给sort字段赋随机数