我有一个存储用户位置的表。我想选择每个用户的最新位置。
我尝试了什么
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`)
)
答案 0 :(得分:0)
SELECT
idUser,
lat,
lng,
MAX(timestamp) AS "MostRecentTime"
FROM table_name
GROUP BY idUser, lat, lng
根据您的平板电脑,我不确定您为什么要添加一个数字作为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