我正在使用最新版本的HapiFHIR(服务器和客户端),它应符合HL7 FHIR标准。
作为我正在进行的项目的一部分,我需要检索每个设备的最新观察结果。有了SQL经验,我自然希望使用诸如GROUP BY
之类的操作来实现这一目标。但是,通过阅读文档,似乎在HapiFHIR中没有这样的操作!
我错过了什么吗?如果没有,那么为每个设备检索最新的(即sort by date, limit 1
)会有什么好的解决方法?
答案 0 :(得分:1)
当您使用FHIR时,它有一个很好的REST搜索API,无需实现您自己的查询。
{{baseurl}}/Observation?device:Device=123&_sort=-_lastUpdated&_count=1
为您提供ID为123的最新设备观察结果。
编辑,因为您还在使用HAPI客户端,您的查询代码如下所示:
Bundle results = myFhirCtx.newRestfulGenericClient("yourFHIRbaseURL")
.search()
.forResource(Observation.class)
.where(Observation.DEVICE.hasId("123"))
.sort().descending(Observation.DATE)
.count(1)
.returnBundle(Bundle.class)
.execute();
上面的GET搜索最新更新的设备观察,JAVA代码根据其日期获得最新的观察。我想你的意思是第二个。
已过时,因为这会返回所有设备的最新n观察,而不是每台设备都是N, 适用于多个设备:
如果您想一次查询多个设备,可以通过查询带有X型设备的Observations或最新的制造商或型号设备观察来聚合查询,请参阅:search parameters for the Device resource
如果要查询一组已知设备ID的最新n观察,可以使用OR运算符,它只是一个冒号。
{{baseurl}}/Observation?device:Device=123,345,678&_sort=-_lastUpdated&_count=n
在hapi客户端代码中:
Bundle results = myFhirCtx.newRestfulGenericClient("ttt")
.search()
.forResource(Observation.class)
.where(Observation.DEVICE.hasAnyOfIds(new ArrayList<String>(Arrays.asList("123", "345", "678" ))))
.sort().descending(Observation.DATE)
.count(n)
.returnBundle(Bundle.class)
.execute();
<强>结论强>
如果您想拥有设备子集中每个设备的最新观察结果,您可以: