Ну, там есть синтаксическая ошибка.Как я объяснил здесь некоторое время назад, вы не можете ссылаться на вычисляемое поле в предложении where
, поэтому полученная метка времени на самом деле является полем, а не агрегированной функцией (max()
).Вы не поняли это, потому что назвали это так же, как поле.Попробуйте выполнить это, и вы увидите:
select max(timestamp) as timestamp2, mmsi, navstatus, rot, sog, lon, lat, cog,
thead, man, mtype from ais_cnb
where (timestamp2 > (now() - interval 30 minute))
group by mmsi
order by timestamp desc
Теперь, независимо от того, правильно ли вы выбираете эти записи или нет, если вы сначала получите все последние 30-минутные данные, а затем вы получите тольконовейшие данные из этого подмножества ... разве это не то же самое, что получение новейших данных?
Кроме того, было бы неплохо добавить все остальные поля в группу с помощью.
Или, может быть, я что-то не так делаю.Не могли бы вы уточнить это?
Редактировать: Чтобы отфильтровать сгруппированные данные, необходимо добавить предложение HAVING
.Ваш предыдущий запрос должен быть написан следующим образом (но я не уверен, что это то, что вы ищете):
select max(timestamp) as timestamp2, mmsi, navstatus, rot, sog, lon, lat, cog,
thead, man, mtype from ais_cnb
group by mmsi
having (timestamp2 > (now() - interval 30 minute))
order by timestamp desc
Тем не менее, я думаю, что вы, возможно, ищете лучшееmax каждой группы, которая должна быть решена с помощью другого запроса ... Но, как я уже сказал, у меня недостаточно информации о проблеме, чтобы сделать вывод.