I have two tables.
EVENT_NARATIVE |
---|
EventNum |
SEQ |
Message |
Message_Time |
GRADE_HISTORY |
---|
EventNum |
Grade |
GradeChangeTime |
The EVENT_NARATIVE Table has a lot of data (millions of rows) and each Event (EventNum) can have multiple EVENT_NARATIVE records.
The GRADE_HISTORY table contains thousands of rows and each EVENT can have multiple Grade changes.
In the EVENT_NARATIVE Table I need to find all records where the MESSAGE LIKE 'CODE set to%' There is only one MESSAGE that meets this criteria for each EVENT.
Once I have those records I need to find the first GRADE from the GRADE_HISTORY table that occurs after the Message_Time.
The result should look like
EventNum, Message, Message_Time, Grade, GradeChangeTime
My SQL looks like this but I know it doesn't work
SELECT
N.EventNum, N.SEQ, N.MESSAGE_TIME, N.MESSAGE,
G.CHANGE_DATE, G.GRADE
FROM
(SELECT EventNum, SEQ, MESSAGE_TIME, MESSAGE
FROM EVENT_NARRATIVE
Where MESSAGE LIKE 'CODE set to%' ) N
Left JOIN (SELECT Top 1
Event_Num, CHANGE_DATE, GRADE
FROM GRADE_HISTORY) G
ON G.Event_Num = N.Event_Num
AND G.CHANGE_DATE >= N.MESSAGE_TIME
SQL is not my day job so any help is appreciated to get the result I need.
SAMPLE DATA EVENT_NARATIVE
*EventNum SEQ MESSAGE_TIME MESSAGE*
000001-01012021 20770236 2021-01-01 00:03:36.0000000 CODE set to 6D02
000001-01022020 8339846 2020-02-01 00:06:14.0000000 CODE set to 17B01
000001-01022021 22038639 2021-02-01 00:04:44.0000000 CODE set to 17A02
SAMPLE DATA GRADE_HISTORY
*EventNum CHANGE_DATE GRADE*
000001-01012021 2021-01-01 00:03:15.0000000 2
000001-01012021 2021-01-01 00:03:37.0000000 3
000001-01012021 2021-01-01 00:03:40.0000000 5
000001-01022020 2020-02-01 00:06:10.0000000 2
000001-01022020 2020-02-01 00:06:15.0000000 2
000001-01022020 2020-02-01 00:06:18.0000000 5
000001-01022020 2020-02-01 00:06:20.0000000 5
000001-01022021 2021-02-01 00:04:40.0000000 2
000001-01022021 2021-02-01 00:04:42.0000000 3
000001-01022021 2021-02-01 00:04:44.0000000 0
000001-01022021 2021-02-01 00:04:54.0000000 5
Expected Result
*EventNum SEQ CHANGE_DATE GRADE*
000001-01012021 20770236 2021-01-01 00:03:37.0000000 3
000001-01022020 8339846 2020-02-01 00:06:15.0000000 2
000001-01022021 22038639 22021-02-01 00:04:44.0000000 0