仅选择具有此类最后时间戳的记录

时间:2012-08-17 13:29:50

标签: mysql

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

我尝试了什么

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`)
)

2 个答案:

答案 0 :(得分:0)

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

供参考:Returning Max Values

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

答案 1 :(得分: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