【发布时间】:2010-10-02 05:13:39
【问题描述】:
我今天一直在努力解决这个 SQL 查询要求,我想知道是否有人可以帮助我。
我有一张运动问题表。其中一列是与问题相关的团队。我的要求是返回一组独特的随机问题。
假设我们有下表并想要 5 个问题:
Question Answer Team
-----------------------------------
question 1 answer 1 team A
question 2 answer 2 team B
question 3 answer 3 team B
question 4 answer 3 team D
question 5 answer 3 team A
question 6 answer 3 team C
question 7 answer 3 team F
question 8 answer 3 team C
question 9 answer 3 team G
question 10 answer 3 team D
会返回一个有效的结果:
question 1 answer 1 team A
question 2 answer 2 team B
question 4 answer 3 team D
question 6 answer 3 team C
question 7 answer 3 team F
我觉得应该可以通过巧妙地使用 Distinct 和 Take 将其作为一个干净的 SQL 语句来完成,但我还不能做到这一点。
目前最好的解决方案来自Mladen Prajdic。我刚刚稍微更新了它以改善它的随机性:
SELECT TOP 10 *
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY Team ORDER BY Team, NEWID()) AS RN, *
FROM Question
) teams
WHERE RN = 2
ORDER BY NEWID()
【问题讨论】: