select
T1.sex,
T1.decades,
T1.counts,
T2.patid
from (
select
sex,
age/10 as decades,
COUNT(*) as counts
from (
select m.patid,
m.sex,
DATEPART(year,min(c.admitdate)) -m.yrdob as Age
from members as m
inner join claims as c on c.patid=m.PATID
group by m.PATID, m.sex,m.yrdob
)x
group by sex, Age/10
) as T1
join (
--right here is where the random sampling occurs
SELECT TOP 50--this is the total number of peolpe in our dataset
patid
,sex
,decades
from (
select m.patid,
m.sex,
(DATEPART(year,min(c.admitdate)) -m.yrdob)/10 as decades
from members as m
inner join claims as c on c.patid=m.PATID
group by m.PATID, m.sex, m.yrdob
) T2
order by NEWID()
) as T2
on T2.sex = T1.sex
and T2.decades = T1.decades
EDIT:J'avais posté une autre question similaire à celle-ci dans laquelle j'ai trouvé que mes résultats n'étaient en fait pas aléatoires, mais qu'ils n'étaient que les résultats TOP N. J'avais commandé par newid()
dans la requête la plus externe et tout ce qui se passait était de mélanger exactement le même ensemble de résultats. À partir d'une question qui est maintenant fermée, j'ai découvert que je devais utiliser le TOP
mot-clé avec order by newid()
dans la ligne commentée de la requête ci-dessus.