|
我试图弄清楚如何在Server" F+ ]% u0 I( L$ L/ H& \
2008r2上查询重新入职。这是访问表的基本结构。还有其他领域,但我认为没有任何帮助。一个问题是,其中一些可能是转移而不是排放,我没有简单的方法可以推断出来,但是现在这个问题可以忽略不计。我尝试了一下,但是我想我对SQL的理解需要更多的工作。我试图找到我可以在线上找到的任何信息,但是没有一个查询使我得出一个有用的结论,或者我只是不明白。任何建议,将不胜感激。
9 C- `' a5 Q, f% M编辑:重新入院是指患者在上次出院前30天内返回。: \# P1 O9 u0 q& P1 u
+---------+--------+-----------------+-----------------+
h4 T2 X5 U {| VisitID | UID | AdmitDT | DischargeDT |% i2 H" ?. K7 p3 p F
+---------+--------+-----------------+-----------------+
& B* J1 L! T) n7 Y- \, V| 12 | 2 | 6/17/2013 6:51 | 6/17/2013 6:51 |
# u, i3 p5 r, S6 @- w9 u| 16 | 3 | 6/19/2013 4:48 | 6/21/2013 13:35 |
9 l* d' O5 y& d! j3 q! L$ x| 18 | 3 | 6/11/2013 12:08 | 6/11/2013 12:08 |
/ }, |1 \+ B3 Q| 21 | 3 | 6/12/2013 14:40 | 6/12/2013 14:40 |
7 k. x; {) a. a, z0 h| 22 | 3 | 6/13/2013 10:00 | 6/14/2013 12:00 |2 a) K) h8 v# a% J j* n2 f/ f
| 25 | 2 | 6/11/2013 16:13 | 6/11/2013 16:13 |% _" ~" M: T. V- ?2 [: l/ Z) t
| 30 | 1 | 6/20/2013 8:35 | 6/20/2013 8:35 | q$ n' C+ E! m
| 31 | 7 | 6/13/2013 6:12 | 6/13/2013 6:12 |
# C; |# p* T' j+ V: ]| 34 | 3 | 6/12/2013 8:40 | NULL |
4 A4 H( U. y. S8 r% J| 35 | 1 | 6/12/2013 8:52 | NULL |3 \! N3 V n8 H$ i( ?8 v) n# i7 J m
| 38 | 2 | 6/12/2013 10:10 | 6/12/2013 10:10 |
2 B5 f; u8 H: J5 c4 m+---------+--------+-----------------+-----------------+5 F8 b- l, n% g( p; b$ s
尝试输入代码:
6 O* Y4 ^" t. u* Z+ uSELECT N2.*4 G6 H4 z+ \3 r: {
FROM visitTable AS N1
: T* p$ k( J2 y0 B1 X* [9 ~+ SINNER JOIN
# ]5 J9 A- S! |& fvisitTable AS N2 ON N1.UID = N2.UID# R: y% \; @3 i1 K4 V) L8 f
WHERE N1.EncounterID N2.EncounterID AND ( N2.AdmitDT BETWEEN N1.DischargeDT and DATEADD(DD,30, N1.DischargeDT)): {' F+ h7 F: V5 l) k1 M' D
! J4 g& f% g7 @, |8 T; {
解决方案:
) y8 n1 Q8 T+ H+ R; q. \ " S- }+ U4 H0 V- E5 b9 S0 P
$ Q; Q5 }& U' c) u( D2 a' s6 p, \+ O, I
这是一个开始:8 E1 S9 e. j+ X" @. a2 N
sqlfiddle
4 M o+ c8 u8 S) l- d新提琴
! ~, V0 [% K {5 `它按照admitDT的顺序获取每个UID的每次访问,然后将每次访问与该结果中的下一次访问配对。如果当前的入学日期在最后的出院日期和从那时起的30天之间,请选择它。但是有一些奇怪的地方-; s# G. E" G' F5 c- _4 ]6 Q7 h
UID 1已显示已于2012年12月12日入学,从未出院,但随后在2013年6月20日再次入学,并于同一天出院。
, R2 U$ g$ O$ _, h. u5 x* A编辑:进行了一些重组,以减少联接的数量" _- u* o3 z: P6 k* Y1 C' w
WITH cte AS (# U0 ]; X- W+ b8 [# L
SELECT visitid,uid,dischargedt,admitdt,
4 u; d. g4 |, s4 B row_number()over(partition BY uid ORDER BY admitdt) AS r
( S$ M4 D- F6 [' P% r* N" A* W4 Y FROM t7 L3 X/ Y) P6 i% a" Y2 P4 j: c8 Z
)
5 s( ]2 d2 X4 l0 [( VSELECT9 v" h9 k, G- o6 J, @
c1.visitid AS v1, c2.visitid AS v2,. _/ E( a; @' ~; l' v5 h
c1.uid,
A- _9 N# C8 v4 |5 v9 lc1.dischargedt as [Discharged from first visit],
. }4 f2 B6 @' y; a) Q: v/ Wc2.admitdt as [Admitted to next visit]4 o7 [* m9 V: _! J9 m+ y9 w
FROM cte c1, [$ Q6 h: [2 h& ~
INNER JOIN cte c2 ON c1.uid=c2.uid+ @7 j& j- l3 ]$ b8 f- j2 F' n; b5 N1 o
WHERE c1.visitidc2.visitid
0 W6 N; L0 O+ ?AND c1.r+1=c2.r+ b# j) Y g2 s8 d- L7 ?8 j* F6 |
AND c2.admitdt BETWEEN c1.dischargedt AND dateadd(d,30,c1.dischargedt )7 U7 |8 l+ Y; C" e+ i s
ORDER BY c1.uid# X# X& T# ]* [
结果 :
0 i. r; ]0 p- h6 t5 }9 F| V1 | V2 | UID | DISCHARGED FROM FIRST VISIT | ADMITTED TO NEXT VISIT |
! o4 \- {* P! w& V$ k|----|----|-----|-----------------------------|-----------------------------|; T: T7 z/ K+ }! v( G
| 25 | 38 | 2 | June, 11 2013 16:13:00+0000 | June, 12 2013 10:10:00+0000 |; M7 N1 o, k( E) B
| 38 | 12 | 2 | June, 12 2013 10:10:00+0000 | June, 17 2013 06:51:00+0000 |
, R, o& v1 J. a| 18 | 34 | 3 | June, 11 2013 12:08:00+0000 | June, 12 2013 08:40:00+0000 |% I! _+ z2 i. B* _; n5 D$ Q2 j
| 21 | 22 | 3 | June, 12 2013 14:40:00+0000 | June, 13 2013 10:00:00+0000 |
2 E6 Z5 D/ r4 Y8 e| 22 | 16 | 3 | June, 14 2013 12:00:00+0000 | June, 19 2013 04:48:00+0000 | |
|