我無法從Oracle數據庫獲取所需的數據。任何幫助將不勝感激。下面是什麼我的表看起來像一個示例:涉及最大日期的複雜Oracle查詢
Table: Vaccinations
Patient_ID | Shot_ID | Series | Date_Taken
-------------------------------------------
123 | 5 | B | 8/1/2011
123 | 5 | 3 | 2/1/2011
123 | 5 | 2 | 1/10/2011
123 | 5 | 1 | 1/1/2011
456 | 3 | 2 | 1/10/2011
456 | 3 | 1 | 1/1/2011
123 | 5 | 2 | 10/1/2010
123 | 5 | 1 | 9/1/2010
該系列列指示其拍攝特定Shot_ID
給藥。 'B'表示給予助推器,'2'表示秒,'1'表示第一,等等,但'3'是最大值,然後是助推器。我想要做的是抓住一個病人的最新系列鏡頭,針對特定類型的鏡頭(Shot_ID
)。例如,我想抓住= 5的病人123的最新系列鏡頭,因此我希望返回此例中的前四個記錄(所有列應在這些行中返回)。最後兩項應該省略,因爲2011年1月1日開始了一系列新的拍攝。無論如何,我有一個algortihm的想法,但我無法編寫查詢。它會像這樣:
獲得患者123的最大日期,
shot_id = 5
。返回該行並查看其系列(在本例中爲'B')。從最大日期獲取下一個最低日期並查看其系列(在本例中爲'3')。如果該系列在1和B之間,則返回該行。如果不存在其他記錄,則結束查詢。
從步驟2獲取下一個最低日期並查看其系列(在本例中爲'2')。如果該系列小於第2步中的系列,則返回該行。否則,結束查詢。
你繼續,直到你得到series = 1
,這是退回或者直到你到達了一系列大於或等於當前的系列,這是不退還重複這些步驟。所以,輸出應該看起來像這樣:
123 | 5 | B | 8/1/2011
123 | 5 | 3 | 2/1/2011
123 | 5 | 2 | 1/10/2011
123 | 5 | 1 | 1/1/2011
這個查詢看起來很複雜,但也許我只是在推翻它。感謝你們的時間。
因此,如果有下面的第一條記錄更加強注射,你想那些返回呢? – NullUserException
我還認爲,如果你只是用數字記錄系列中的所有鏡頭,而不是使用'B'作爲助推器,它會更容易。 – NullUserException
是的,如果在第一條記錄之後還有更多助推器,我希望那些返回的也是。 –