У меня есть две таблицы, одна называется События, а другая - Документы.В каждой таблице есть два столбца даты: начало и конец (т. Е. Начало события, конец события, начало документа, конец документа).Обе таблицы связаны полем с именем Customer_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
IЯ хотел бы, чтобы конечный результат показал это:
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
Я пробовал поискать решение для поиска в Google и пробовал одно или два предложения, но ни один из примеров, которые я могу найти, не подходит для сравнения дат по таблицам.или даже для Oracle.Кроме того, у меня довольно ограниченные знания, когда речь заходит о SQL, но большая часть того, что я получил, была отсюда, так что спасибо уже за помощь, которую я уже получил.
Редактировать: еще одно условие заключается в том, чтоЯ хотел бы вернуть только коррелирующие типы событий / документов.Поэтому я хочу вернуть только DOC_ID, где DOC_TYPE - «Запрос» или «Информация», и то же самое относится и к 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