-1

我有一个存储用户位置的表。我想选择每个用户的最新位置。

我试过的

SELECT lat, lng, address, idUser, timestamp FROM locations ORDER BY timestamp DESC LIMIT 1

SELECT lat, lng, address, idUser, MAX(timestamp) FROM locations

当然,这两个给了我所有用户中的最后一个位置。表的结构很简单:

CREATE TABLE `locations` (
  `idLocation` int(11) NOT NULL auto_increment,
  `idUser` int(11) NOT NULL,
  `address` varchar(255) NOT NULL,
  `lat` float(10,6) NOT NULL,
  `lng` float(10,6) NOT NULL,
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`idLocation`),
  KEY `idUser` (`idUser`)
)
4

2 回答 2

0
SELECT
  idUser,
  lat,
  lng,
  MAX(timestamp) AS "MostRecentTime"
FROM table_name
GROUP BY idUser, lat, lng

供参考:返回最大值

根据您的平板电脑,我不确定您为什么要添加一个数字作为 LocationId。跟踪用户位置更改的次数?我假设它是为了这个目的——如果是为了找到最新的位置,那么跟踪最近的时间戳会容易得多。

于 2012-08-17T13:35:30.597 回答
0

我在此页面中找到了解决方案,使用自加入。获取每个用户的最新时间戳,然后通过自加入获取行的其余部分。

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

SELECT
l.idUser,
l.lat,
l.lng,
l.timestamp
FROM (
select idUser, max(timestamp) as maxtimestamp
from locations group by idUsuario)
as max inner join locations as l on l.idUsuario = max.idUsuario and l.timestamp = max.maxtimestamp
GROUP BY idUsuario
于 2012-08-20T06:39:59.723 回答