Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lấy mẫu ngẫu nhiên từ một tập dữ liệu lớn

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 

CHỈNH SỬA:Tôi đã đăng một câu hỏi khác tương tự như câu hỏi này, trong đó tôi thấy rằng kết quả của tôi trên thực tế không phải là ngẫu nhiên, mà chúng chỉ là kết quả TOP N. Tôi đã đặt hàng theo newid() trong truy vấn ngoài cùng và tất cả những gì đang làm là xáo trộn xung quanh cùng một tập kết quả chính xác. Từ một câu hỏi hiện đã được đóng lại, tôi phát hiện ra rằng tôi cần sử dụng TOP từ khóa cùng với order by newid() trong dòng nhận xét trong truy vấn trên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để so sánh 2 hàng từ cùng một bảng (SQL Server)?

  2. Nhận hàng trước và hàng tiếp theo từ các hàng đã chọn với điều kiện (WHERE)

  3. Cách sử dụng FILEGROUPPROPERTY () trong SQL Server

  4. Truy vấn chuyển qua SQL Server làm cơ sở cho tập bản ghi DAO trong Access

  5. Kỹ thuật hiện thực hóa CTE T-SQL không hoạt động trên SQL Server 2012