Sql 在一组Labtests中选择第一个和最后一个测试

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

我有一个表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          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'