2

我正在寻找一种使用 Odata 创建子选择/子查询的方法。我要创建的查询应如下所示:

SELECT * 
FROM Treatment
WHERE status = 'Pos'
and ID IN ( 
    SELECT FIRST(ID)
    FROM Treatment
    WHERE TreatmentTypeSK = 9
    GROUP BY Person, TreatmentTypeSK
    ORDER BY Date DESC
)

作为我正在尝试完成的示例,请查看以下数据。

ID    Person    TreatmentTypeSK    Status    Date
----------------------------------------------------
1     Bob       9                  Pos       1/5/15
2     Bob       9                  Neg       2/10/15
3     Jane      9                  Pos       1/20/15
4     Jane      9                  Neg       1/1/15
5     Jane      8                  Pos       3/2/15

使用上面的查询(我希望使用 odata 生成),返回的唯一结果将是 ID 3,因为它是 Jane 的最新处理记录,TreatmentTypeSK 为 9,状态为“Pos”。请注意,不会返回 ID 2,因为即使 Bob 有几条 TreatmentTypeSK 9 的记录,最新的一条没有“Pos”状态。

4

1 回答 1

1

像这样的子查询不适用于 Odata,您必须进行 2 次查询,但我认为您有更大的问题,因为我认为子查询本身是不可能的。

我认为,虽然在 OData 规范中使用此链接中提到的 group by 在技术上可能实现这一点:http: //docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0 /cs01/odata-data-aggregation-ext-v4.0-cs01.html#_Toc378326290

我认为大多数库都不支持此功能,因此您可能很难实际使用它。我在 TripPin 上试了一下,还是不行……

我可能会将此功能公开为 odata 函数,或者(有点混乱)将查询更改为不按部分分组 - 这也将消除对子查询的需要。问题是你可以每人获得多行,但你可以在客户端上发布处理。

于 2015-07-21T15:51:53.343 回答