2017-10-21 92 views
1

我困在一個困難的sql聚合問題上。sql - 針對列樣本中的每個唯一值2來自另一列的不同值

考慮下面的表/視圖:

Column1 Column2 
1  2564 
2  6550 
1  3578 
2  6548 
2  4789 
1  9876 

我想設計一個查詢,以做到以下幾點:

對於每一個不同的列1值,樣品2分的記錄。採樣策略可能是某種引導/重新採樣,因爲可能沒有太多的數據點。

因此該表將成爲:

Column1  Column2 
1   9876 
1   3578 
2   6548 
2   6550 

平臺:MS SQL

任何答案讚賞。

回答

3

對於沒有替換的隨機樣本:

select t.* 
from (select t.*, 
      row_number() over (partition by column1 order by newid()) as seqnum 
     from t 
    ) t 
where seqnum <= 2; 

,或者可選地:

select top (2) with ties t.* 
from t 
order by row_number() over (partition by id order by newid()); 

對於具有替換的隨機樣品:

隨着置換:

select * 
from ((select top (1) with ties t.* 
     from t 
     order by row_number() over (partition by id order by newid()) 
    ) 
     union all 
     (select top (1) with ties t.* 
     from t 
     order by row_number() over (partition by id order by newid()) 
    ) 
    ) x; 
+0

我想要挑選15個uniq ue行,並簡單地使用替換選項擴展代碼。它像一個魅力。謝謝! – treeof

相關問題