Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zufallsauswahl aus einem großen Datensatz

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 

BEARBEITEN:Ich hatte eine andere ähnliche Frage gepostet, bei der ich feststellte, dass meine Ergebnisse nicht zufällig waren, sondern nur die TOP-N-Ergebnisse. Ich hatte per newid() bestellt in der äußersten Abfrage und alles, was getan wurde, war, um genau dieselbe Ergebnismenge zu mischen. Aus einer jetzt geschlossenen Frage habe ich herausgefunden, dass ich den TOP verwenden musste Schlüsselwort zusammen mit order by newid() in der auskommentierten Zeile in der obigen Abfrage.