【发布时间】:2014-10-20 04:55:48
【问题描述】:
假设我有一个应用程序可以确定抽奖中的获胜者。所有条目都输入到一个表中,表明它们的员工 ID。每个员工可以多次进入图纸。我从表中选择,按 newid 排序以获得随机排序。我假设员工的条目(数据库记录)越多,每次运行它时,他就有更好的机会进入我的查询的前 5 名。到目前为止,一切都很好。但是,由于每个员工都有多条记录,他很有可能会多次进入前 5 名。我需要能够从随机排序的结果中返回 5 条唯一记录。
如何获得 5 个唯一行,同时仍确保具有多个绘图条目的行在选择中获得更大的权重?
我的基本查询:
SELECT TOP 5 employeeID
FROM events
TABLESAMPLE(1000 ROWS)
ORDER BY CHECKSUM(NEWID());
有点像我正在尝试做的事情:
SELECT TOP 5 *
FROM events
WHERE employeeID IN (SELECT employeeID
FROM events
TABLESAMPLE(1000 ROWS)
ORDER BY CHECKSUM(NEWID())
)
ORDER BY CHECKSUM(NEWID())
但我当然不能在子查询中进行排序。
【问题讨论】:
-
multiple drawing entries get a heavier weightin听起来不像是随机选择吧? -
如果您将其视为员工将票根放入绘图桶中。对于我投入的每张票,我都有机会获胜。问题是,一旦我赢得了 5 个奖项中的一个,我就没有资格赢得任何其他奖项。你可以这样看,一旦我的名字被抽中,就删除我所有的其他票。
-
我想我可以获取前 1 个员工 ID,将其添加到临时表并再次选择。如果临时表中不存在下一个选定的employeeID,则仅添加它。但我怀疑有一种更清洁的方法。
标签: sql sql-server tsql sorting