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

SQL-TSQLで再アドミッションを照会するにはどうすればよいですか?

    スタートは次のとおりです:

    sqlfiddle

    新しいフィドル

    admitDTの順序で各UIDの各訪問を取得し、その結果で各訪問を次の訪問とペアにします。現在の許可日が最後の退院日から30日以内の場合は、それを選択します。ただし、いくつかの奇妙な点があります。UID1は、2012年6月12日に許可され、排出されなかったことが示されていますが、2013年6月20日に再度許可され、同じ日に排出されました。

    編集:結合の数を減らすために少し再構築されました

    WITH cte AS (
      SELECT visitid,uid,dischargedt,admitdt,
        row_number()over(partition BY uid ORDER BY admitdt) AS r
      FROM t
      )
    SELECT
    c1.visitid AS v1, c2.visitid AS v2,
    c1.uid,
    c1.dischargedt as [Discharged from first visit],
    c2.admitdt as [Admitted to next visit]
    FROM cte c1
    INNER JOIN cte c2 ON c1.uid=c2.uid
    WHERE c1.visitid<>c2.visitid
    AND c1.r+1=c2.r
    AND c2.admitdt BETWEEN c1.dischargedt AND dateadd(d,30,c1.dischargedt )
    ORDER BY c1.uid
    

    結果

    | V1 | V2 | UID | DISCHARGED FROM FIRST VISIT |      ADMITTED TO NEXT VISIT |
    |----|----|-----|-----------------------------|-----------------------------|
    | 25 | 38 |   2 | June, 11 2013 16:13:00+0000 | June, 12 2013 10:10:00+0000 |
    | 38 | 12 |   2 | June, 12 2013 10:10:00+0000 | June, 17 2013 06:51:00+0000 |
    | 18 | 34 |   3 | June, 11 2013 12:08:00+0000 | June, 12 2013 08:40:00+0000 |
    | 21 | 22 |   3 | June, 12 2013 14:40:00+0000 | June, 13 2013 10:00:00+0000 |
    | 22 | 16 |   3 | June, 14 2013 12:00:00+0000 | June, 19 2013 04:48:00+0000 |
    


    1. MySQL管理者向けのMariaDB列ストアのガイド

    2. SELECT*存在しない場所

    3. MySQLダイナミックピボット

    4. postgresのbyteaデータ型からSetIconを介してJLabelを更新する