-1

ユーザーの場所を格納するテーブルがあります。すべてのユーザーの最新の場所を選択したいと思います。

私が試したこと

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

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

もちろん、これらの 2 つは、すべてのユーザーの最後の場所を教えてくれました。テーブルの構造は単純です。

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 に答える