2017-10-21 117 views
1

Je suis bloqué sur un problème d'agrégat sql difficile.sql - pour chaque valeur unique dans l'échantillon de colonne 2 valeurs différentes d'une autre colonne

Tenir compte de la table/vue suivant:

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

Je voudrais concevoir une requête pour effectuer les opérations suivantes:

Pour chaque valeur Column1 distincte, échantillon des dossiers 2x. La stratégie d'échantillonnage pourrait être une sorte de bootstrap/rééchantillonnage car il n'y aurait pas trop de points de données.

Ainsi la table deviendra:

Column1  Column2 
1   9876 
1   3578 
2   6548 
2   6550 

Plate-forme: MS SQL

Toutes les réponses sont appréciées.

Répondre

3

Pour un échantillon aléatoire sans remplacement:

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

Ou encore:

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

Pour un échantillon aléatoire avec le remplacement:

Avec remplacement:

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

I voulait choisir 15 uniq ue lignes et ont simplement étendu le code avec l'option de remplacement. Ça a marché comme sur des roulettes. Je vous remercie! – treeof