【问题标题】:GROUP BY-like function in FHIR SearchFHIR 搜索中的类似 GROUP BY 的功能
【发布时间】:2018-06-20 17:16:37
【问题描述】:

我正在使用最新版本的 HapiFHIR(服务器端和客户端),它应该符合 HL7 FHIR。

作为我正在进行的项目的一部分,我需要检索每个设备的最新观察结果。有过 SQL 的经验,自然希望使用GROUP BY 之类的操作来实现这一点。但是从阅读文档看来,HapiFHIR 中并没有这样的操作!

我错过了什么吗?如果没有,为了检索每个设备的最新版本(sort by date, limit 1),有什么好的解决方法?

【问题讨论】:

    标签: java hapi hl7-fhir hapi-fhir


    【解决方案1】:

    当您使用 FHIR 时,它有一个很好的 REST 搜索 API,您无需实现自己的查询。

    {{baseurl}}/Observation?device:Device=123&_sort=-_lastUpdated&_count=1
    

    为您获取 ID 为 123 的设备的最新观察结果。

    FHIR search api

    编辑:由于您也在使用 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 搜索设备的最新更新 Observation,JAVA 代码根据其日期获取最新的 Observation。我想你的意思是第二个。

    已过时,因为这将返回所有设备的最新 n 观察,而不是每个设备的 N, 对于多个设备:

    如果您想一次查询多个设备,您可以通过查询带有 X 型设备的观测值或最新的制造商或型号设备观测值来聚合查询,请参阅: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();
    

    结论

    如果您想获得设备子集的每个设备的 n 个最新观测值,您可以:

    • 多次使用本示例的第一个查询
    • 或者,如果您更喜欢单个 REST 调用,您可以将这些 GET 调用批处理成批处理包,如下例所示:Batch Bundle search。这将返回一个批处理响应包,其中包含每个搜索的条目。

    【讨论】:

    • 感谢您的回答。但是,如果我的问题不清楚,我的意思是说我正在尝试为每个设备(同时)获得最新的观察结果。例如在一个请求中用于 50 种不同的设备。
    • 您好 elnin,再次感谢您的宝贵时间。不幸的是,您上传的代码没有按照描述执行。它只返回一个单一的观察结果——在所提供的设备中最新的那个。这与我的用例不同——我想在一个请求中获得一些功能,用于设备[a, b, c...] 返回每​​个设备的最新观察结果[a 的最新观察结果,b 的最新观察结果,最新观察c...]。
    • @AlexandreCassagne 你有没有找到任何解决方法?我有一个类似的场景。我必须“只获取所有 Patient 资源中最新发布的 DiagnosticReport 资源”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2016-08-28
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多