从每个组SQL Server中选择一个随机行

Gul*_*let 3 sql-server

我有一张如下表

ID   Code   Age
----------------
1    4758   21
1    7842   14
1    9821   23
1    6842   9
2    8472   24
2    7558   31
2    7841   28
3    7881   38
3    8794   42
3    4871   43    
Run Code Online (Sandbox Code Playgroud)

对于每个ID,我想像这样随机选择其中一行

ID   Code   Age
----------------
1    7842   14    
2    7841   28
3    4871   43 
Run Code Online (Sandbox Code Playgroud)

这可能在SQL Server中吗?

The*_*war 9

select top 1 with ties id,code,age 
from
table
order by row_number() over (partition by id order by rand())
Run Code Online (Sandbox Code Playgroud)

更新:按照随机顺序返回行,你必须使用NEWId,因为RAND() is fixed for the duration of the SELECT on MS SQL Server.

 select top 1 with ties id,code,age 
 from
 table
order by row_number() over (partition by id order by NEWID())
Run Code Online (Sandbox Code Playgroud)