获取最近30分钟的数据并获取最新的行

Hyp*_*vil 2 mysql sql

我有一张AIS海洋数据表,经常更新.

我需要的是过去30分钟的数据,从中得出最新的行和MMSI应该是唯一的.

我现在的查询:

select max(timestamp) as timestamp, mmsi, navstatus, rot, sog, lon, lat, cog,
thead, man, mtype from ais_cnb
where (timestamp > (now() - interval 30 minute))
group by mmsi
order by timestamp desc
Run Code Online (Sandbox Code Playgroud)

似乎除时间戳之外的所有数据都是旧的.

小智 9

如果你想要每个唯一的"mmsi"有一个最后30分钟的最新行,那么使用连接到子查询,你可以找到最大的时间戳首先应该工作,如:

SELECT timestamp, a.mmsi, navstatus, rot, sog, lon, lat, cog, thead, man, mtype
FROM ais_cnb a INNER JOIN
(SELECT mmsi, MAX(timestamp) AS max_timestamp FROM ais_cnb
 WHERE timestamp > (now() - interval 30 minute)
 GROUP BY mmsi) t
ON ((timestamp = t.max_timestamp) AND (a.mmsi = t.mmsi))
Run Code Online (Sandbox Code Playgroud)