sql >> Database teknologi >  >> RDS >> Sqlserver

Tilfældig stikprøve fra et stort datasæt

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:Jeg havde postet et andet spørgsmål, der ligner dette, hvor jeg fandt ud af, at mine resultater faktisk ikke var tilfældige, men de var kun de TOP N resultater. Jeg havde bestilt af newid() i den yderste forespørgsel, og alt, hvad der gjorde, var at blande sig rundt i nøjagtig det samme resultatsæt. Fra et spørgsmål, der nu er lukket, fandt jeg ud af, at jeg skulle bruge TOP søgeord sammen med order by newid() i den kommenterede linje i ovenstående forespørgsel.




  1. Uventet undtagelse:SQLSTATE[HY000] [1045] Adgang nægtet for bruger ****@'localhost' (bruger adgangskode:JA)

  2. skylleborde - adgang nægtet

  3. php hvordan man brugte valgboks til søgedata i listevisning (tabel)

  4. MySQL:fjern på hinanden følgende duplikerede værdier