我不太确定这个特定查询的最佳表达方式,所以我希望标题是足够的,但是,我会尝试描述它是什么,我需要能够了解如何去做。只是为了澄清,这是针对oracle的sql。根据标准拆分一张表并比较
我们有一张名为评估表。本表中有不同类型的评估,但是,一些评估应按照逻辑顺序并在规定的时间范围内跟随其他评估。当客户有相同类型的多个评估时,问题就出现了,因为我们必须在Excel中使用相当低效的数组公式来确定哪个“完整”评估与“初始”评估相一致。
我有一个较早的查询已解决在这个网站上(Returning relevant date from multiple tables including additional table info),我相信它包含了很多逻辑(特别是在识别在指定时间范围内发生的相应事件)。但是,虽然该查询从3个独立表(评估,事件,责任)中提取数据,但我现在需要创建一个查询,该查询生成类似的结果,但从1个主表和第2个表中提取返回工作人员信息。我认为最合乎逻辑的方法是创建一个查询,用一种类型的评估来查看评估表,然后再次加入评估表(可能是临时表),评估类型将遵循最初的评估类型。
例如:
表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种不同类型的评估。任何指针将不胜感激,我已经从这个社区有很大的帮助,这是非常有价值的。
编辑:
编辑为包括MBs建议后的解决方案。
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
找到完整的开始的条件是什么?在您的示例中没有匹配表格的字段? – Mark 2012-01-12 16:41:35
对不起,在评估表中应该有一个客户端ID用于将评估链接在一起,但是它也将依赖于在初始结束和核心开始之间有一定的天数 - 即不超过+/- 20天的差距。 – bawpie 2012-01-12 16:52:16