在asp中怎么才能实现随机抽取数据库中的记录

在asp中怎么才能实现随机抽取数据库中的记录,第1张

用random函数取随机数就可以了然后将取得的随机数用SQL语句查询和你数据库中的某条记录ID是否相同是的话就显示,不是就不显示,要想显示多个随机的记录你可以用DO WHILE循环来做!还不明白发消息问我,顺便把你提问的问题也复制给我,太多了我分不清~

教你在Excel中生成随机数的5种方法

展开全文

Excel 中的随机数并非是每个用户都需要的功能 ,大多数人的数据都会使用固定数字和公式,可能不需要在他们的报告中出现随机数。

财务模型可以使用依赖于概率的随机模拟,有些数据模型可能需要运行数千次,但随机数生成器会提供每次模拟的参数。

无论您需要怎么样的随机数,Excel 都有多种生成它们的方法。

在这篇文章中,我将向您展示可用于将

第 1 页

Excel做excel进行数据分析

勤哲Excel服务器2022学习和下载。会Excel,懂管理,就能做excel进行数据分析及手机app软博会金奖产品,适合于各行各业的管理人员使用。

点击立即咨询,了解更多详情

咨询

北京勤哲软件技术 广告

随机数插入到工作簿中的各种方法。

1/ 使用 RAND 函数生成随机数

我将向您展示的第一种方法是在 Excel 中生成随机值的最简单方法。

Excel中有一个非常简单的RAND函数,它不需要参数,会生成一个 0 到 1 之间的随机数。

公式:(上限 - 下限 + 1 ) * rand() - 下限

介绍:John von Neumann说:Any one who considers arithmetical methods of producing random digits is , of course, in a state of sin

所以,在讨论算法实现随机数的时候,总是说“伪随机数”。

现在,应用最广的随机数生成算法是由Derrick Henry Lehmer1951年给出的线性同余法:

Xn+1 = ( aXn + c ) mod m, n>=0

在上一篇伪随机数的论述中,并没有给出X0, a, c, m的取值规则,只是给出了ANSI C和Microsoft Visual C++的实现。

在这儿我们可以自己先思考一下,我们期望从上式中得到的随机数应该满足:

1) 上式的输出足够随机,这是最基本的要求;

2) 上式给出尽量多的输出,越接近m个越好(不可能超过m),即周期尽量长,最好为m,这样才能保证上式满足均匀分布(m个数在周期m中各出现一次);

3) 上式的生成速度足够快。

最容易想到的,m的取值为计算机字大小(如2^32或2^64)。

但是这儿有个很严重的问题:Xn低位的随机性很弱。原因如下:

令d|m, 且

Yn = Xn mod d

Yn+1 = ( ( aXn + c ) mod m ) mod d

= ( aYn + c ) mod d

上述表达式的意义即:Yn为Xn低k位(d=2^k),这样的Yn序列形成周期为d甚至更短的同余序列。举例说明:d为2^1时,Yn为Xn的最低位(可假定为1或0),若Yn+1 != Yn,则Yn+2 == Yn必定成立,仅当a、c皆为奇数时Yn、Yn+1将0、1交替,否则,为常数(0或1)。

暂时抛开随机性不管,先找到周期为m的随机序列中的取值规则。

Donald Knuth在The Art of Computer Programming, Volume 2: Seminumerical Algorithms中的3212节对m, a, c和X0取值规则的表述:

1) gcd(c, m) = 1 即c, m互素,再白一点,c, m除1之外没有其他公因子;

2) 任给质数p, p|m ==> p|(a-1) 即m%p==0,则(a-1)%p==0。

3) 4|m ==> 4|(a-1) 即m%4==0,则(a-1)%4==0。

这个证明过程对于我这样的数论基础不是很扎实的搞应用技术的人来说有点难以理解了。有兴趣的话,还是去看3212的证明吧:-)。

上面的规则告诉我们,满足了上述规则后,可以保证序列周期为m。对于前面提到的关于随机性的问题,既然Xn低位的随机性比较弱,可以只取Xn的高位作为输出。高位的随机性和统计意义由a, c确定,其取值涉及统计检验,具体的也还是看33吧。

这篇文章解决了具有统计意义的随机数的部分理论问题。

PS: 之前曾经BS过Windows Live Writer,当时觉得Writer编辑功能太少,不能直接设定链接文字的字体颜色,知道CSS可以设定之后,又觉得Word 2007编辑的Blog转成html之后太大,而且也知道Word 2007上面是可以设置链接的target为_blank的。现在发现Writer还是很不错的了,原来是可以设定格式的,也可以直接编辑html,而且可以Web预览,链接还可以加入到链接词汇表,挺方便的。

简单点实现可以在表中使用GUID,并自动生成,取数据时以此字段排序,使用完再更新此字段,10分钟的判断则通过加一个时间栏位就红了。基本保证是随机的。步骤如下:

建个测试表,假定tData是你需要的字段,tGUID、tUseTime为必须字段且不可为空

CREATE TABLE [dbo][tbaidu_t1](

 [tGUID] [uniqueidentifier] NOT NULL,

 [tUseTime] [datetime] NOT NULL,

 [tData] [int] NOT NULL

) ON [PRIMARY]

GO

ALTER TABLE [dbo][tbaidu_t1] ADD  CONSTRAINT [DF_tbaidu_t1_tGUID]  DEFAULT (newid()) FOR [tGUID]

GO

ALTER TABLE [dbo][tbaidu_t1] ADD  CONSTRAINT [DF_tbaidu_t1_tUseTime]  DEFAULT (getdate()) FOR [tUseTime]

GO

2 新建一个存储过程

CREATE PROC usp_tbaidu_GetRandData

AS

-- 选取指定数据  

SELECT TOP 3  FROM tbaidu_t1 

WHERE datediff(MI,tUsetime,GETDATE())>4

ORDER BY tGUID

-- 更新已选择数据的时间栏位 

UPDATE tbaidu_t1 SET tUseTime = GETDATE()

WHERE tGUID IN(

 SELECT TOP 3 tGUID FROM tbaidu_t1 

WHERE datediff(MI,tUsetime,GETDATE())>4

ORDER BY tGUID

--更新所有数据对应的fGUID字段 

UPDATE tbaidu_t1 SET tGUID = NEWID()

3执行存储过程就好了

EXEC usp_tbaidu_GetRandData

最近实现的一个系统中,遇到了这样的情况:需要从数据库表中随机读取n条记录,必须保证每条记录都不相同原来的想法是弄两个链表,第一个读取对应数据库表中的所有记录,根据每个记录的ID来生成这个链表;第二个链表是有选定的随机读取的记录生成的,这样从第一个链表中选定的,就可以剪掉,以后就不会被选种,把选中的添加到第二个链表中后来发现,在不同的数据库中完全可以用SQL语句来实现随机选定不同记录这里把不同数据库实现的语句粘在这里,以供需要的人来参考Select a random row with MySQL:SELECT column FROM tableORDER BY RAND()LIMIT 1Select a random row with PostgreSQL:SELECT column FROM tableORDER BY RANDOM()LIMIT 1Select a random row with Microsoft SQL Server:SELECT TOP 1 column FROM tableORDER BY NEWID()Select a random row with IBM DB2:SELECT column, RAND() as IDX FROM table ORDER BY IDX FETCH FIRST 1 ROWS ONLYSelect a random record with Oracle:SELECT column FROM( SELECT column FROM tableORDER BY dbms_randomvalue )WHERE rownum = 1

以上就是关于在asp中怎么才能实现随机抽取数据库中的记录全部的内容,包括:在asp中怎么才能实现随机抽取数据库中的记录、如何根据一组数据随机生成多个固定误差的数据、谁知道数据库中怎样产生随机数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9779939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存