sql >> Database >  >> RDS >> Sqlserver

Willekeurige steekproeven uit een grote dataset

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:ik had nog een soortgelijke vraag gepost waarin ik ontdekte dat mijn resultaten niet willekeurig waren, maar alleen de TOP N-resultaten. Ik had besteld door newid() in de buitenste query en het enige dat deed was rond precies dezelfde resultatenset schuifelen. Uit een vraag die nu gesloten is, kwam ik erachter dat ik de TOP . moest gebruiken trefwoord samen met order by newid() in de commentaarregel in de bovenstaande vraag.




  1. Alternatief voor PDO::lastInsertId / mysql_insert_id

  2. Hoe de functie Tabelwaarde uit te voeren?

  3. Mysql:database naast gegevens dumpen

  4. Importeren van en exporteren naar bestanden met behulp van de MySQL-opdrachtregel