2015-07-21 58 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