【发布时间】:2013-11-20 16:52:52
【问题描述】:
我有一个如下结构的表 myTable:
id: int PRIMARY KEY
number: int
我想在条件下从myTable中最多随机选择3行:
- 最多应该选择三行
- 我们应该选择 id 和计算为
0,3*RAND()*number的值转换为INT。计算列的别名是randomValue - 只有带有
randomValue>0的行应该包含在结果中 -
randomValues的总和应小于给定的阈值,例如 60。
到目前为止,我已经写了这个:
SELECT TOP 3 id,randomValue
FROM(
SELECT id, CONVERT(INT,(0.3*RAND()*number)) AS randomValue
FROM myTable
WHERE number>0
) AS D
WHERE randomValue>0
ORDER BY NEWID()
上面的代码最多选择 3 个 randomValue 大于零的随机行。但是,我不知道如何满足条件 4,即如何使所选行中的 randomValues 总和小于 60。
这是我正在测试解决方案的 myTable:
【问题讨论】:
-
我没有试过你的查询。但我不建议使用子查询。您必须使用 ROW_Number()。示例语法如下。 ROW_NUMBER() OVER(PARTITION BY [ColumnName] ORDER BY ColumnValue Desc as [CountColumn]
标签: sql sql-server