我有一个数据库,其中包含时间戳及其对应的纬度和经度的列表。我正在尝试获取数据库中最新时间戳的经度和纬度。在这里,我可以获取最新的时间戳,但是我的纬度和经度不会更新,并且始终返回第一个时间戳的值。如何获得最新时间戳的返回值?
SELECT delivery.vehicle_id, max(timestamp), latitude, longitude from test
inner join delivery on delivery.vehicle_id = test.vehicle_id
where DATE_FORMAT(timestamp,'%H:%i:%s') <=
DATE_FORMAT(CURRENT_TIMESTAMP,'%H:%i:%s')
group by delivery.vehicle_id
所需的输出:例如,车辆ID 4034的最新时间戳是13:20,车辆ID的最新时间戳是13:05,因此对于车辆ID 4034和车辆ID 4035,它应分别获得纬度= 22.29098和经度= 114.199942。纬度= 22.279973,经度= 114.188513。输出的所有车辆(不仅仅是一辆车)的输出都必须是最新的纬度和经度。
delivery table
vehicle_id start_time end_time
4034 11/1/2014 9:00 11/1/2014 17:00
4035 11/1/2014 8:00 11/1/2014 16:00
test table
timestamp vehicle_id latitude longitude
11/1/2014 0:00 4034 22.283861 114.146215
11/1/2014 3:59 4034 22.292902 114.200619
11/1/2014 8:49 4034 22.28557 114.192797
11/1/2014 13:20 4034 22.29098 114.199942
11/1/2014 13:23 4034 22.290495 114.196016
11/1/2014 0:08 4035 22.293131 114.200671
11/1/2014 6:02 4035 22.293043 114.200737
11/1/2014 9:35 4035 22.278188 114.153437
11/1/2014 13:05 4035 22.279973 114.188513
11/1/2014 14:33 4035 22.277418 114.17543
答案 0 :(得分:1)
对于这种方法,您首先需要为每个vehicle_id
制作一个带有最新时间戳的子查询,然后将该子查询加入适当的列以获取其余信息( ie ,相关的纬度和经度):
SELECT
t.vehicle_id,
t.timestamp,
t.latitude,
t.longitude
FROM
test AS t
INNER JOIN
(SELECT
vehicle_id, MAX(timestamp) AS maxT
FROM
test
GROUP BY
vehicle_id) AS max_log ON max_log.vehicle_id = t.vehicle_id
AND max_log.maxT = t.timestamp
注意,只有在将时间戳数据标准化后(如在下一个示例中),或者如果您使用以下可用的MySQL类型之一,此方法才有效:DATETIME or TIMESTAMP。
test table
timestamp vehicle_id latitude longitude
11/01/2014 00:00 4034 22.283861 114.146215
11/01/2014 03:59 4034 22.292902 114.200619
11/01/2014 08:49 4034 22.28557 114.192797
11/01/2014 13:20 4034 22.29098 114.199942
11/01/2014 13:23 4034 22.290495 114.196016
11/01/2014 00:08 4035 22.293131 114.200671
11/01/2014 06:02 4035 22.293043 114.200737
11/01/2014 09:35 4035 22.278188 114.153437
11/01/2014 13:05 4035 22.279973 114.188513
11/01/2014 14:33 4035 22.277418 114.17543
您可以在下一个链接上浏览一个有效的示例: