SQL选择随机记录

时间:2016-03-10 16:39:49

标签: sql sql-server random newid

我有一个像下面这样的表,希望选择不同的人,例如第2行,第9行,第11行,第20行。我不想选择MAX(),因为它不是随机的。而且我不想两次选择杰克。它需要是每组记录中的一个人

ID  Name    Category Level
1   Jack    Dragon     3
2   Jack    Falls      5
3   Jack    Spider     5
4   Jack    Apprentice 1
5   Jack    Jolly      5
6   Luke    Dragon     1
7   Luke    Falls      1
8   Luke    Spider     3
9   Luke    Apprentice 5
10  Luke    Jolly      5
11  Mark    Dragon     3
12  Mark    Falls      3
13  Mark    Spider     1
14  Mark    Apprentice 3
15  Mark    Jolly      1
16  Sam     Dragon     3
17  Sam     Falls      5
18  Sam     Spider     5
19  Sam    Apprentice  5
20  Sam    Jolly       3

3 个答案:

答案 0 :(得分:1)

假设记录集=具有相同“名称”值的行:

with cte_random
as
(
select *, rank() over (partition by forenames order by newid()) as rnk from tbl
)
select id, name, category, level from cte_random where rnk = 1

答案 1 :(得分:0)

SELECT DISTINCT name
from tbl
ORDER BY NEWID()

答案 2 :(得分:0)

这看起来比听起来更棘手,创建一个带有额外temp列的tempId表应该可行。尝试:

create table #temp(ID int, Name char(10), Category char(10), Level int, tempId varchar(36))

insert #temp select ID, Name, Category, Level, NEWID() as 'tempId' from yourTable
select ID, Name, Category, Level from #temp where ID IN
    (select min(tempId) from #temp group by Name)

drop table #temp