TSQL、私は SQL 2012 を使用していますが、以前のバージョンで動作するものは何でも使用します。NEWID() を使用してテーブルから TOP X のランダムな行を選択する方法を知っています。それとは別に、いくつかの方法、CTE などを使用して現在の合計を選択する方法を知っています。
しかし、これら 2 つの結果を 1 つのクエリに組み合わせるにはどうすればよいでしょうか。したがって、現在の合計が15を超えない3つのランダムレコード(および3つ以上)を選択したいと思います。これについて頭を包むことはできません...
次の単純なテーブルとデータを使用します。
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を返すこともあります. .:
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