Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Próbkowanie losowe z dużego zbioru danych

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 

EDYCJA:Wysłałem inne pytanie podobne do tego, w którym stwierdziłem, że moje wyniki nie były w rzeczywistości losowe, ale były to tylko wyniki TOP N. Zamówiłem przez newid() w najbardziej zewnętrznym zapytaniu i wszystko, co robiło, to tasowanie wokół dokładnie tego samego zestawu wyników. Z pytania, które jest teraz zamknięte, dowiedziałem się, że muszę użyć TOP słowo kluczowe wraz z order by newid() w skomentowanym wierszu w powyższym zapytaniu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupy dostępności programu SQL Server AlwaysOn:instalacja i konfiguracja, część 2

  2. aktualizowanie wielu kolumn za pomocą instrukcji case na serwerze sql

  3. Jak zrobić deterministyczny RAND() w SQL Server

  4. Błąd przywracania bazy danych programu SQL Server:określony rzut jest nieprawidłowy. (UIMenedżera Sql)

  5. Jak mogę określić zainstalowane instancje SQL Server i ich wersje?