sql >> データベース >  >> RDS >> Sqlserver

大規模なデータセットからのランダムサンプリング

    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 
    

    編集:私はこれに似た別の質問を投稿しましたが、私の結果は実際にはランダムではないことがわかりましたが、それらはトップNの結果にすぎませんでした。 newid()で注文しました 最も外側のクエリでは、まったく同じ結果セットをシャッフルするだけでした。現在クローズされている質問から、TOPを使用する必要があることがわかりました。 キーワードとorder by newid() 上記のクエリのコメント行にあります。




    1. MSSqlServerのOracleDualテーブルに相当するものは何ですか?

    2. KeyCloakユーザーフェデレーションと動的ロール

    3. SQLServerコレクションインベントリスクリプト-1

    4. 末尾から数えて特定のインデックスの文字列に部分文字列を挿入します。 mysqlで行う方法は?