Если у вас установлен phpMyAdmin, используйте его функцию «Поиск».
Я использовал это до 250 табличных / 10 ГБ баз данных (на быстром сервере), а время отклика - не что иное, как удивительное.
SELECT * FROM
GPSReport AS G1
JOIN (SELECT device_serial, max(datetime) as mostrecent
FROM GPSReport group by device_serial) AS G2
ON G2.device_serial = G1.device_serial and g2.mostrecent = g1.datetime
ORDER BY G1.device_serial
У вас правильное соединение, поэтому, если у вас есть более одной записи для серийного номера устройства в таблице GPSReport
, он получит все эти записи и объединит их с уникальный список, полученный от SELECT DISTINCT device_serial FROM GPSReport
.
попробуйте:
Select r.*
From GPSReport r
Where datetime =
(Select Max(DateTime)
From GPSReport
Where device_serial = r.device_serial)
Как насчет чего-то вроде этого - поскольку я не мог запустить его, я полагаю, что мой synatx не идеален
select *
from (
select device_serial, [datetime], triggerID, latitude, longitude, speed, [address],
ROW_NUMBER() over (partition by device_serial order by device_serial asc, [datetime] desc) as row
from gpsreport
) as data
where row = 1
Вам может потребоваться изменить предложение order by, чтобы выбрать предпочтительную запись, если есть кратны тем же device_serial и datetime
Я бы сделал это с помощью общего табличного выражения (CTE), например:
With ResultTable (RowNumber
,device_serial
,datetime
,triggerID
,latitude
,longitude
,speed
,address)
AS
(
SELECT Row_Number() OVER (PARTITION BY device_serial
ORDER BY datetime DESC)
,device_serial
,datetime
,triggerID
,latitude
,longitude
,speed
,address
FROM GPSReport
)
SELECT device_serial
,datetime
,triggerID
,latitude
,longitude
,speed
,address
FROM ResultTable
WHERE RowNumber = 1