I have the following query and it is taking a long time to run and I was wondering is there a more efficient way of coding this. I have two tables DEVICE_LASTUPDATE and DEVICE_EVENTS.
DEVICE_LASTUPDATE table has about 14 records and looks like this:
DEVICE_ID LAST_UPDATE
device1 2014-06-01 08:25:23
device2 2014-06-01 09:01:45
device3 2014-06-01 07:43:06
device4 2014-06-01 11:13:14
...etc
DEVICE_EVENTS table has over a million records and looks like this:
DEVICE_ID CREATED_DATE EVENT_CODE
device1 2014-06-01 08:25:23 1011
device1 2014-06-01 09:01:45 2025
device3 2014-06-01 07:43:06 1015
device2 2014-06-01 15:13:09 2115
device1 2014-06-01 11:20:19 1551
...etc
What I want is for every DEVICE_ID in DEVICE_LASTUPDATE find DEVICE_LASTUPDATE.LAST_UPDATE = DEVICE_EVENTS.CREATED_DATE and return the EVENT_CODE for those DEVICE_ID's
The following SQL is what I running and it works but it is slow (5.5 seconds on average):
SELECT * FROM (SELECT * FROM DEVICE_LASTUPDATE) AS lastupdate
JOIN DEVICE_EVENTS
WHERE DEVICE_EVENTS.CREATED_DATE = lastupdate.LAST_UPDATE
AND DEVICE_EVENTS.DEVICE_ID = lastupdate.DEVICE_ID
SELECT * FROM DEVICE_LASTUPDATE AS lastupdate... What's the additionalSELECTfor?