Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pengambilan sampel acak dari kumpulan data besar

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:Saya telah memposting pertanyaan lain yang mirip dengan ini di mana saya menemukan bahwa hasil saya sebenarnya tidak acak, tetapi itu hanya hasil TOP N. Saya telah memesan oleh newid() dalam kueri terluar dan semua yang dilakukan adalah mengocok set hasil yang sama persis. Dari pertanyaan yang sekarang ditutup, saya menemukan bahwa saya perlu menggunakan TOP kata kunci bersama dengan order by newid() di baris komentar dalam kueri di atas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dimaksud dengan program atau skrip baris perintah sederhana untuk membuat cadangan database server SQL?

  2. Mengembalikan nilai dari pernyataan INSERT di SQL Server 2008

  3. T-SQL:Bulatkan ke interval 15 menit terdekat

  4. Apakah T-SQL memiliki fungsi agregat untuk menggabungkan string?

  5. Pekerjaan Agen SQL - Daftar tarik-turun Jalankan Sebagai kosong