【发布时间】:2010-07-09 21:59:01
【问题描述】:
有没有办法从数据库表中显示一定数量的随机记录,但受创建日期和时间的影响很大。
例如:
- 随机显示 10 条记录,但是
显示最新的频率高于最早的频率
假设
news表中有 100 个条目- 最新(按日期时间)记录将有几乎 100% 的机会被选中
- 第一个(按日期时间)记录被选中的几率几乎为 0%
- 第 50 条(按日期时间)记录将有 50% 的机会被选中
mssql中直接有这样的东西吗?或者我可以在 c# 中使用一些函数(最佳实践)吗?
thnx
** edit:我知道这个标题真的很糟糕。如果您有更具描述性的内容,请进行编辑。 thnx
【问题讨论】:
-
我们在谈论多少条记录?是否附加了数字 ID?
-
一个简单的方法是根据您希望有多少机会选择该元素,为集合中的每个元素分配一个“权重”。然后你总结所有这些权重,并在该范围内选择一个随机数。然后您再次遍历所有元素以找出您实际选择的元素。例如,3 个元素,权重分别为 25、25 和 50。您随机选择 37,它位于第 2 个元素(25-49,包括)内。
-
@aronchick 记录可以从 1 到最大 int 我猜:P
-
@Lasse V. Karlsen 我不得不读了几次那个答案,但现在我明白了。它似乎真的很好。你能以某种方式帮助挑选重量吗?在我的例子中,第一个、第 50 个和最后一个的重量是多少?非常感谢一个好主意
标签: c# sql-server visual-studio random