2015-07-21 55 views
1

我正在寻找一种方法来使用Odata创建子查询/子查询。我想要创建的查询应该如下所示:在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唯一的结果,因为它是简氏与9 TreatmentTypeSK和状态最新的治疗记录的POS ”。请注意,ID 2不会被返回,因为即使Bob有一些TreatmentTypeSK 9的记录,但最新的一个没有'Pos'状态。

回答

0

像这样的子查询不是奥达塔,你将不得不做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函数或者(或者有点混乱地)公开,将查询更改为没有分组 - 这会消除子查询的需要。麻烦的是,你可以得到每个人多行,但你可以在客户端上发布这个过程。

+0

谢谢汤姆。我已经看到了你提到的$ orderby功能。但是,这不是最大的担忧。我真的在寻找上面查询中显示的子查询的一些指导。 –

+0

对不起,我没有把自己弄清楚,我已经编辑了答案,希望能更清楚一些。 – TomDoesCode