1
TSQL,我正在使用SQL 2012,但將使用以前版本的任何工作。我知道如何使用NEWID()從表中選擇TOP X隨機行。另外,我知道如何使用幾種方法,CTE等選擇運行總數。TSQL選擇運行總數的隨機行
但是,如何將這2個結果合併爲一個查詢?所以我想選擇3個隨機記錄(AND不小於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
非常好。我應該考慮回到這樣的基礎。到目前爲止,這還沒有失敗/超過15,並且總是返回3條記錄,並且似乎總是15,這是好的。這很可能是我的答案。謝謝斯坦利! – user1822533
但是,一旦測試完全不同的實時數據,這個速度會慢很多。希望能夠使用更新的SQL 2012功能\t - 也很難將其更改爲返回TOP 5記錄(或任何數量),而無需重新編寫大部分記錄,添加v4,v5等。而當我確實增加了更多的表格,t3,t4,它的指數變慢。我需要不同的版本返回到10 ...嗯 – user1822533
我看到如果這可以變得非常緩慢,如果你添加更多的連接...也許嘗試預生成連接到一個新的表與聚集索引sum( t1.value + t2.value ...) – Stanley