sql >> Databáze >  >> RDS >> Sqlserver

Náhodné vzorkování z velkého souboru dat

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:Poslal jsem další podobnou otázku, ve které jsem zjistil, že mé výsledky nebyly ve skutečnosti náhodné, ale byly to pouze TOP N výsledky. Objednal jsem pomocí newid() v nejvzdálenějším dotazu a vše, co dělal, bylo prohazování přesně stejné sady výsledků. Z otázky, která je nyní uzavřena, jsem zjistil, že potřebuji použít TOP klíčové slovo spolu s order by newid() v řádku s komentářem ve výše uvedeném dotazu.




  1. PDO nevyvolává výjimku s nesvázanými parametry (a bez proměnných v dotazu)

  2. Jak používat Rails s velkým názvem sloupce?

  3. Zakázat zalamování ve výstupu Psql

  4. Laravel:Generovaný SQL způsobí chybu pouze u konkrétních tabulek