17,082
社区成员
发帖
与我相关
我的任务
分享
SQL> WITH vital_signs_rec AS (
2 SELECT '1' patient_id,'a' visit_id, '体温' vital_signs,TO_DATE('20110101','yyyymmdd') time_point,10 vital_signs_values FROM DUAL UNION ALL
3 SELECT '1' patient_id,'b' visit_id,'体温' vital_signs,TO_DATE('20110102','yyyymmdd') time_point,20 vital_signs_values FROM DUAL UNION ALL
4 SELECT '1' patient_id,'c' visit_id,'体温' vital_signs,TO_DATE('20110104','yyyymmdd') time_point,70 vital_signs_values FROM DUAL UNION ALL
5 SELECT '1' patient_id,'d' visit_id,'体温' vital_signs,TO_DATE('20110103','yyyymmdd') time_point,30 vital_signs_values FROM DUAL UNION ALL
6 SELECT '2' patient_id,'e' visit_id,'体温' vital_signs,TO_DATE('20110104','yyyymmdd') time_point,110 vital_signs_values FROM DUAL UNION ALL
7 SELECT '2' patient_id,'f' visit_id,'体温' vital_signs,TO_DATE('20110106','yyyymmdd') time_point,120 vital_signs_values FROM DUAL UNION ALL
8 SELECT '2' patient_id,'g' visit_id,'体温' vital_signs,TO_DATE('20110105','yyyymmdd') time_point,170 vital_signs_values FROM DUAL UNION ALL
9 SELECT '2' patient_id,'h' visit_id,'体温' vital_signs,TO_DATE('20110103','yyyymmdd') time_point,130 vital_signs_values FROM DUAL
10 )
11 SELECT m.patient_id,
12 MAX(DECODE(m.rn,1,visit_id)) visit_id,
13 MAX(DECODE(m.rn,1,vital_signs_values)) vital_signs_values1,
14 MAX(DECODE(m.rn,2,vital_signs_values)) vital_signs_values2,
15 MAX(DECODE(m.rn,3,vital_signs_values)) vital_signs_values3
16 FROM (
17 SELECT t.*,
18 ROW_NUMBER() OVER(PARTITION BY t.patient_id ORDER BY t.time_point DESC) rn
19 FROM vital_signs_rec t
20 WHERE t.vital_signs = '体温'
21 ) m
22 WHERE m.rn <= 3
23 GROUP BY m.patient_id
24 ;
PATIENT_ID VISIT_ID VITAL_SIGNS_VALUES1 VITAL_SIGNS_VALUES2 VITAL_SIGNS_VALUES3
---------- -------- ------------------- ------------------- -------------------
1 c 70 30 20
2 f 120 170 110