TSQL,我使用的是 SQL 2012,但会使用以前版本的任何东西。我知道如何使用 NEWID() 从表中选择前 X 个随机行。另外,我知道如何使用多种方法、CTE 等选择运行总计。
但是,如何将这两个结果组合成一个查询?所以我想选择 3 条随机记录(并且不少于 3 条),其中运行总数不超过 15 条。无法围绕这个...
使用这个简单的表格和数据:
CREATE TABLE TblTest (
id int not null identity(1,1) primary key,
value int not null
);
INSERT INTO TblTest (value) VALUES (4);
INSERT INTO TblTest (value) VALUES (3);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (4);
INSERT INTO TblTest (value) VALUES (7);
INSERT INTO TblTest (value) VALUES (7);
INSERT INTO TblTest (value) VALUES (6);
INSERT INTO TblTest (value) VALUES (5);
INSERT INTO TblTest (value) VALUES (4);
我的尝试在下面,不确定在那里有 NEWID 是否有意义,有时它只返回 2 行,有时是 0,我希望它足够聪明,总是返回 3 行,如果可能的话,最接近 15 .. .:
select top(3) ourRandID,
id,
value,
running_total
from (
select NEWID() as ourRandID,
id,
value,
sum(value) over (order by NEWID()) as running_total
from TblTest
) t
where running_total < 16