2012-08-17 120 views
-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`) 
) 
+0

選擇緯度,經度,地址,ID用戶所,時間戳FROM位置ORDER BY時間戳DESC LIMIT 1 選擇緯度,經度,地址,ID用戶所,MAX(時間戳)FROM位置 這兩個當然,給了我所有用戶的最後一個位置。結構很簡單,我沒有包含它來保持簡潔: CREATE TABLE( 'idLocations' int(11)auto_increment, 'idUser' int(11), 'address' varchar(255) , 'lat'浮法(10,6), 'lng'浮動(10,6), 'timestamp'時間戳默認CURRENT_TIMESTAMP, PRIMARY KEY('idLocations') ) – manutenfruits 2012-08-17 13:36:57

+0

如果你試過我的回答如下,如如上所述,並說它給了你最新的位置,是不是你想要的?請澄清你想要的東西否則! ;)請嘗試我的整個陳述,不只是部分。 – jos 2012-08-17 13:48:03

回答

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 
0
SELECT 
    idUser, 
    lat, 
    lng, 
    MAX(timestamp) AS "MostRecentTime" 
FROM table_name 
GROUP BY idUser, lat, lng 

參考:Returning Max Values

基於平板電腦我真的不知道爲什麼要添加一個數字作爲LocationId。跟蹤用戶位置更改的次數?我假設它是爲了這個目的 - 如果要找到最新的位置,只跟蹤最近的時間戳就容易多了。

+0

這給了我表中的所有記錄,因爲按lat和lng(以及所有記錄中的不同值)分組也完全分開了行。 – manutenfruits 2012-08-20 06:20:24

+0

根據我的理解,locationID的用途是none。當數據庫已經存在時,我開始研究這個項目,我不想改變任何事情。 – manutenfruits 2012-08-20 06:22:08