MSSQL分组后每组随机取出一条数据
字段1 字段2
id name
1 a
2 b
3 c
4 c
5 b
根据name分组,最后每组随机取出一条数据。
思路可以有
1、将内容分组,如:第一组name=a,b,c,d,第二组name=e,f,g,h
2、1—4的范围内获得一个随机数,赋值给checki
3、split(name,",")(checki)
4、如果内容分组后,第一组和第二组的数量不一致——"a,b,c,d"和"e,f,g",用下标对比处理一下checki
select id,name from(select *,row=row_number()over(partition by name order by newid()) from tb)t where row=1
create table t ( id int, name varchar(10) ) insert into t select 1,'a' unionselect 2,'b' unionselect 3,'c' unionselect 4,'c' unionselect 5,'b' select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id from t group by t.name drop table t