我有两个表,一个叫做Events,一个叫做Documents。每个表格有两个日期列,开始和结束(所以事件开始,事件结束,文档开始,文档结束)。两个表都通过名为Customer_ID的字段进行链接。我感兴趣的是返回最接近的相关事件开始(和它的ID),根据客户ID日期到文档开始日期,因此,例如表中的数据可能看起来像:在不同的表格中返回到最近的日期
Customer_ID DOC_ID DOC_Start DOC_END
A 12 22/01/2011 23/01/2011
A 13 01/12/2011 05/12/2011
C 22 13/03/2011 20/03/2011
Customer_ID Event_ID Event_Start Event_END
A J1 01/01/2011 23/01/2011
A J2 04/12/2011 05/12/2011
C J44 15/03/2011 20/03/2011
我会想最终的结果显示如下:
Customer_ID DOC_ID DOC_Start DOC_END Event_ID
A 12 22/01/2011 23/01/2011 J1
A 13 01/12/2011 05/12/2011 J2
C 22 13/03/2011 20/03/2011 J44
我试着用搜索引擎的解决方案,并尝试一项两个建议,但没有一个例子,我可以找到似乎是跨表,甚至是比较日期甲骨文。另外,在SQL方面,我的知识相当有限,但大部分我已经从这里获得,所以非常感谢我已经收到的帮助。
编辑:另一个条件是我想只返回相关的事件/文档类型。因此,我只想将DOC_TYPE为“Inquiry”或“Info”的DOC_ID取回,对于Event_Type也是如此。
编辑:谢谢文森特,我把建议的地方放在那里(想想我到处都试过了,但在那里!),我现在正在得到所需的结果。
我会后以供将来参考的工作溶液中,如果有人有兴趣:
SELECT
*
FROM (SELECT
O_ASSESSMENTS.ASM_SUBJECT_ID as "ID",
O_ASSESSMENTS.ASM_ID as "Assessment ID",
O_ASSESSMENTS.ASM_START_DATE as "Assessment Start",
O_ASSESSMENTS.ASM_END_DATE as "Assessment End",
O_SERVICE_EVENTS.SEV_ID as "Event ID",
O_SERVICE_EVENTS.SEV_ACTUAL_DATE as "Event Start",
O_SERVICE_EVENTS.SEV_OUTCOME_DATE as "Event End",
ROUND(O_ASSESSMENTS.ASM_START_DATE -O_SERVICE_EVENTS.SEV_ACTUAL_DATE,0) as "Likely",
row_number() over(PARTITION BY O_ASSESSMENTS.ASM_ID
ORDER BY abs(O_ASSESSMENTS.ASM_START_DATE - O_SERVICE_EVENTS.SEV_ACTUAL_DATE)) rn
FROM
O_ASSESSMENTS
JOIN O_SERVICE_EVENTS ON O_ASSESSMENTS.ASM_SUBJECT_ID = O_SERVICE_EVENTS.SEV_SUBJECT_ID
Where O_SERVICE_EVENTS.SEV_CODE IN ('t','t1') AND O_ASSESSMENTS.ASM_QSA_ID IN ('test','test1') ) WHERE rn = 1
'event_start'日期是否可以在'DOC_start'状态之前出现,仍然被认为是最接近的?或者'event_start'总是要迟些? – ean5533
是的,它可以。 :) – bawpie