Одним из способов является использование следующего:
SELECT
cl.*
FROM covid.locations cl
INNER JOIN (
SELECT
userid
, MAX( id ) mid
FROM covid.locations
GROUP BY
userId
) g ON cl.userid = g.userid
AND cl.id = cl.mid
Другим является использование row_number() over()
SELECT
userId
, lat
, lng
FROM (
SELECT
*
, ROW_NUMBER() OVER (PARTITION BY userid ORDER BY id DESC) rn
FROM covid.locations
GROUP BY
userId
) d
WHERE rn = 1
Оба идентифицируют «самую последнюю» строку в исходной таблице на основе в столбце id
этой таблицы. Обратите внимание, что для второго запроса требуется MySQL версия 8+, поскольку именно тогда row_number()
стало поддерживаться в этой базе данных. Первый запрос должен выполняться в БД, поддерживающих SQL.