2016-12-13 3 views
0

habe ich wie eine Tabelle untenaus jeder Gruppe SQL Server eine zufällige Zeile auswählen

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  

Für jede ID, ich möchte nach dem Zufallsprinzip einer der Reihen wählen, wie so

ID Code Age 
---------------- 
1 7842 14  
2 7841 28 
3 4871 43 

Ist das in SQL Server möglich?

Antwort

3
select top 1 with ties id,code,age 
from 
table 
order by row_number() over (partition by id order by rand()) 

Update: nach dieser Return rows in random order, Sie haben newid zu verwenden, da 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()) 
+0

Perfect, danke – GullitsMullet

2

Verwenden Newid() in order by-Klausel von Row_number()

SELECT [ID], [Code], [Age] 
FROM (SELECT *, 
       Row_number() 
       OVER(
        PARTITION BY ID 
        ORDER BY Newid()) RNO 
     FROM #Table1)A 
WHERE RNO = 1 
1
with cte as 
(
select *,rank() over (partition by id order by Newid()) as rn from #c 
) 
select id,code,age from cte where rn=1 
0

zu Wählen Sie di verschiedene Sätze jedes Mal, verwenden Sie checksum(newid()) in der order by Klausel.

Abfrage

;with cte as(
    select *, rn = row_number() over(
     partition by ID 
     order by abs(checksum(newid())) % 15 
    ) 
    from [your_table_name] 
) 
select * from cte 
where rn = 1; 
Verwandte Themen