如何一次从表中选择N个随机记录,而不重复之前由同一操作返回的记录?在SQL Server中选择N条随机记录而不重复
一个显而易见的解决方案是:
SELECT TOP 5 * FROM
MyTable
WHERE Id NOT IN (SELECT Id FROM PreviouslyReturned)
ORDER BY newid()
但是那不是因为MyTable的开始成长真的效率低下?
我有一长串记录,而且我一次需要5个记录来进行回合制游戏,而不需要重复任何已经为给定游戏拉动的记录。由于我大概知道会发生多少回合,所以我可以在比赛开始之前选择一个随机样本,这个样本非常大,但我宁愿它是“动态的”。我发现this question,它使用MySQL的随机种子。
最终会有这么多的记录,重复不会成为一个问题(记录>> N),但在那之前,我需要记录是唯一的。在旁注中,我为我的持久层使用了Fluent NHibernate;也许NHibernate有一些允许这个功能。
“终究会有那么多的记录中的重复不会成为一个问题。”我不知道你怎么能做出这样的表述,除非你能保证你的伪随机数发生器不会连续给你两次相同的值。 – 2011-04-24 20:35:21
@Jim,我的意思是说,在蓝色月亮中重复一次对我的应用来说并不是什么大事。 – 2011-04-25 07:41:31
你的直觉在这里可能是错误的,[生日问题](http://en.wikipedia.org/wiki/Birthday_problem)。 – Ishtar 2011-04-28 11:23:28