sql >> Databasteknik >  >> RDS >> Sqlserver

Slumpmässigt urval från en stor datamängd

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:Jag hade postat en annan fråga som liknar denna där jag fann att mina resultat inte var slumpmässiga, utan de var bara de BÄSTA N-resultaten. Jag hade beställt av newid() i den yttersta frågan och allt som gjordes var att blanda runt exakt samma resultatuppsättning. Från en fråga som nu är stängd fick jag reda på att jag behövde använda TOP nyckelord tillsammans med order by newid() i den kommenterade raden i ovanstående fråga.




  1. Finns det något sätt att konvertera en varchar till DATETIME i SQL SERVER 2008?

  2. Hur beviljar man fjärråtkomst till MySQL för ett helt subnät?

  3. SUBSTRING_INDEX med flera avgränsare

  4. Importera data från XML-filerna till en MySQL-databas