Sql 在一组Labtests中选择第一个和最后一个测试
我有一个表PatientLab我有一组测试,如下所示Sql 在一组Labtests中选择第一个和最后一个测试,sql,postgresql-9.1,Sql,Postgresql 9.1,我有一个表PatientLab我有一组测试,如下所示 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
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;
您的表格和详细信息我已尝试选择patientid,dateordered,结果来自PatientLab,其中patientid在选择patientid中,maxdateordered AS dateordered from PatientLabTest='cd4'group by patientid我只能从同一张表中获取最大值,但无法从同一张表中同时获取最大值和最小值,如果一名患者只有一个cd4,我们是否仍应包含一行详细信息?对于那些没有CD4’s的患者也是如此?@Tooneice是的,但它应该与first和lastAnd具有相同的日期,而那些没有CD4’s的患者?换句话说,一行有patientid,没有其他内容,或者在结果中根本没有该患者的出现?结果与期望的结果不一样,有时最小日期可能有最大结果。日期和结果是独立的。i、 e.最小日期不一定要有最小结果这不是一个条件,它在SQL server 2012中运行良好,但我无法在postgresql 9中复制它。你知道吗@JohnHC@Shark-NeilFelyx窗口函数和CTE都应该在Postgres中工作,你有没有收到任何错误或没有数据?我同意@JohnHC:它也应该在Postgresql中工作。@JohnHC没有收到任何错误,只是没有在Postgresql 9中加载任何数据,而是在sqlserver 2012中加载数据。我需要它在postgresPostgresql中工作,它通常对与MSSQL不同的WHERE条件区分大小写:try WHERE labtest='cd4'