gpt4 book ai didi

sql - 在不同的表中返回最近的日期

转载 作者:行者123 更新时间:2023-12-01 03:42:36 25 4
gpt4 key购买 nike

我有两张表,一张叫做 Events,一张叫做 Documents。每个表都有两个日期列,开始和结束(因此事件开始、事件结束、文档开始、文档结束)。两个表都通过名为 Customer_ID 的字段链接。我有兴趣根据客户 ID 将最接近的相关事件开始(及其 ID)日期返回到 Doc 开始日期,因此例如表中的数据可能如下所示:

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

我已经尝试通过谷歌搜索解决方案,并尝试了一个或两个建议,但我能找到的所有示例似乎都不是用于比较跨表的日期,甚至是用于 Oracle 的。此外,我对 SQL 的了解相当有限,但我学到的大部分知识都来自这里,所以非常感谢我已经收到的帮助。

编辑:另一个条件是我只想返回相关的事件/文档类型。所以我只想带回 DOC_ID,其中 DOC_TYPE 是“查询”或“信息”,Event_Type 也是如此。

编辑:谢谢文森特,我按照建议将 where 放入(我想我已经在所有地方都试过了,但那里!)现在我得到了所需的结果。

如果有人感兴趣,我会发布工作解决方案以供将来引用:

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

最佳答案

您可以使用 analytics :

SELECT *
FROM (SELECT d.customer_id, d.doc_id, d.doc_start, d.doc_end, e.event_id,
row_number() over(PARTITION BY d.doc_id
ORDER BY abs(d.doc_start - e.event_start)) rn
FROM doc d
JOIN event e ON d.customer_id = e.customer_id
/*WHERE CLAUSE*/)
WHERE rn = 1

关于sql - 在不同的表中返回最近的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8433465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com