【发布时间】:2012-01-12 16:13:55
【问题描述】:
我不太确定表达这个特定查询的最佳方式,所以我希望标题足够,但是,我将尝试描述我需要能够理解如何做的内容。澄清一下,这是针对 oracle sql 的。
我们有一个名为评估的表格。此表中有不同类型的评估,但是,某些评估应按照逻辑顺序并在设定的时间范围内跟随其他评估。当客户有多个相同类型的评估时,问题就会出现,因为我们必须在 excel 中使用效率相当低的数组公式来确定哪个“完整”评估与“初始”评估相对应。
我有一个较早的查询已在此站点 (Returning relevant date from multiple tables including additional table info) 上解决,我认为其中包含许多所需逻辑(特别是在识别在指定时间范围内发生的相应事件时)。然而,虽然该查询从 3 个单独的表(评估、事件、责任)中提取数据,但我现在需要创建一个查询,该查询生成类似的结果,但从 1 个主表和第二个表中提取以返回工作人员信息。我认为最合乎逻辑的方法是创建一个查询,该查询使用一种评估类型查看评估表,然后再次加入评估表(可能是临时表?),评估类型将遵循最初的评估类型。
例如:
表 1(评估):
Client ID Assessment Type Start End
P1 1 Initial 01/01/2012 05/01/2012
表 2(评估温度?):
Client ID Assessment Type Start End
P1 2 Full 12/01/2012
表 3:
ID Worker Team
1 Bob Team1
2 Lyn Team2
结果:
Client ID Initial Start Initial End Initial Worker Full Start Full End
P1 1 01/01/2012 05/01/2012 Bob 12/01/2012
所以表 1 和表 2 取自同一张表,只是它带回了不同的评估。理想情况下,将进行检查以确保“完整”评估在“初始”评估结束后的 X 天内开始(类似于前面提到的前一个查询中的“可能”检查)。如果可以实现这一点,可能值得一提的是,我也有兴趣将其扩展到查看多种评估类型,因为大致在周期中,客户可能会进行 4 或 5 种不同类型的评估。任何指点都将不胜感激,我已经从这个社区获得了很多帮助,这非常有价值。
编辑:
根据 MB 的建议进行了编辑以包含解决方案。
Select
*
From(
Select
I.ASM_SUBJECT_ID as PNo,
I.ASM_ID As IAID,
I.ASM_QSA_ID as IAType,
I.ASM_START_DATE as IAStart,
I.ASM_END_DATE as IAEnd,
nvl(olm_bo.get_ref_desc(I.ASM_OUTCOME,'ASM_OUTCOME'),'') as IAOutcome,
C.ASM_ID as CAID,
C.ASM_QSA_ID as CAType,
C.ASM_START_DATE as CAStart,
C.ASM_END_DATE as CAEnd,
nvl(olm_bo.get_ref_desc(C.ASM_OUTCOME,'ASM_OUTCOME'),'') as CAOutcome,
ROUND(C.ASM_START_DATE -I.ASM_START_DATE,0) as "Likely",
row_number() over(PARTITION BY I.ASM_ID
ORDER BY
abs(I.ASM_START_DATE - C.ASM_START_DATE))as "Row Number"
FROM
O_ASSESSMENTS I
left join O_ASSESSMENTS C
on I.ASM_SUBJECT_ID = C.ASM_SUBJECT_ID
and C.ASM_QSA_ID IN ('AA523','AA1326') and
ROUND(C.ASM_START_DATE - I.ASM_START_DATE,0) >= -2
AND
ROUND(C.ASM_START_DATE - I.ASM_START_DATE,0) <= 25
and C.ASM_OUTCOME <>'ABANDON'
Where I.ASM_QSA_ID IN ('AA501','AA1323')
AND I.ASM_OUTCOME <> 'ABANDON'
AND
I.ASM_END_DATE >= '01-04-2011') WHERE "Row Number" = 1
【问题讨论】:
-
在您的示例中找到完整开始的条件是什么,表之间没有匹配的字段?
-
抱歉,评估表中应该有一个客户 ID,用于将评估链接在一起,但它也依赖于初始结束之间的固定天数和核心的开始 - 即间隔不超过 +/- 20 天。