选择第一个和最后一个测试组Labtests
问题描述:
我有一个表PatientLab我有一组测试如下选择第一个和最后一个测试组Labtests
patientid labtest dateordered result
100 cd4 1/1/14 500
100 cd4 1/4/14 200
100 cd4 1/5/15 800
100 vl 1/4/14 564
200 cd4 1/5/16 455
200 cd4 1/6/16 678
200 cd4 1/7/16 234
200 cd4 1/8/16 356
200 vl 1/7/16 1000
我想要的结果的;
patientid FirstCD4 FirstCD4Date LastCD4 LastCD4Date
100 500 1/1/14 800 1/5/15
200 455 1/5/16 356 1/8/16
正在使用PostgreSQL 9
答
with CTE as
(
select p1.*,
row_number() over(partition by patientid order by dateordered asc) as r1,
row_number() over(partition by patientid order by dateordered desc) as r2
from PatientLab p1
where labtest = 'cd4' -- Case sensitive, thanks etsa
)
select C1.PatientID,
C1.result as FirstCD4,
C1.dateordered as FirstCD4Date,
C2.result as LastCD4,
C2.dateordered as LastCD4Date
from CTE C1
inner join CTE C2
on C1.PatientID = C2.PatientID
where C1.r1 = 1
and C2.r2 = 1
答
您可以使用最小和最大
select a.patientid, min(a.result) as FirstCD4, min(dateordered) as FirstCD4Date
, max(a.result) as LastCD4, max(dateordered) as LastCD4Date
from (
select * from yourpatient where labtest = 'cd4') a
group by a.patientid;
你的表和细节Code
+0
结果与预期的结果不一样,有时最短的日期可以有最大的结果。日期和结果是独立的。即这是不是最小日期必须有最小结果的条件 –
你尝试过什么呢? – etsa
我试图'选择patientid,dateordered,导致从PatientLab 其中(patientid)IN( 选择patientid,最大值(dateordered)从PatientLab AS dateordered 其中LABTEST = 'CD4' 组由patientid )'是能够只能得到最大值,但无法同时从最大值和最小值中获得最大值和最小值 –
对于患者只有一个CD4的情况,我们是否还应该包括一行以及我们所拥有的细节?对于那些没有CD4的人也一样吗? – toonice