【发布时间】:2014-02-21 22:55:08
【问题描述】:
我无法从 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)。例如,我想获取患者 123 的最新系列照片,Shot_ID = 5,所以我想在这种情况下返回前四条记录(所有列都应该在那些行中返回)。最后两个应该省略,因为新的一系列镜头是在 2011 年 1 月 1 日开始的。无论如何,我有一个算法,但我在编写查询时遇到了麻烦。它会是这样的:
获取患者 123
shot_id = 5的最大日期。返回该行并查看其系列(在本例中为“B”)。从 Max Date 中获取下一个最低日期并查看其系列(在本例中为“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
这个查询似乎很复杂,但也许我只是想多了。谢谢大家的时间。
【问题讨论】:
-
那么,如果在你的第一张唱片之后还有更多的助推器,你是否也希望它们也被退回?
-
我还认为,如果您只记录系列中的所有镜头及其编号,而不是使用
B作为助推器,会更容易。 -
是的,如果在第一条记录之后还有更多的助推器,我希望也能返回。