Вот пример использования SQL Server. Он использует коррелированный подзапрос с преимуществом выполнения сопоставления с использованием modem_ID, а не совпадением с отметкой времени.
CREATE TABLE #GPS_modem
(
ID INT IDENTITY(1,1) PRIMARY KEY,
vehicle_no VARCHAR(10)
)
CREATE TABLE #vehicle_log
(
ID INT IDENTITY(1,1) PRIMARY KEY,
modem_ID INT,
longitude INT,
latitude INT,
[timestamp] DATETIME DEFAULT GETDATE()
)
INSERT INTO #GPS_modem
SELECT 'ABC123' UNION ALL SELECT 'XYZ123'
INSERT INTO #vehicle_log
SELECT 1,234,543,GETDATE()
UNION all
SELECT 2,4342,432234,GETDATE()
UNION all
SELECT 1,4322,432,DATEADD(DAY,-1,GETDATE())
UNION all
SELECT 2,6336,5324,DATEADD(DAY,-1,GETDATE())
SELECT * FROM #GPS_modem
SELECT * FROM #vehicle_log
SELECT
vehicle_no,
longitude,
latitude,
[timestamp]
FROM
#GPS_modem A
inner join #vehicle_log B on
A.ID = B.modem_ID
WHERE B.ID IN
(
SELECT TOP 1 ID
FROM #vehicle_log
WHERE modem_ID = A.ID
ORDER BY [timestamp] DESC
)
DROP TABLE #GPS_modem
DROP TABLE #vehicle_log
Ура, Джон