2010-03-08 70 views
2

我有3個字段的表:MySQL的時間戳和GROUP BY與兩個表

  • ID(不是唯一的,而不是主鍵)
  • timestamp

我想爲每個不同的ID獲得最後一項,但是當我做
SELECT ID, max(timestamp) from table GROUP BY ID
標記字段是wr翁。

我有以下字段的另一個表:

  • ID(唯一,主鍵)
  • lat
  • lng

我想執行相同的查詢,但與latlng領域,但由於我不能做的第一步,我不知道什麼樣的o我應該使用f查詢。我一直在嘗試沒有成功。

難道有人指着我正確的方向嗎?非常感謝。

+0

Dup:http://stackoverflow.com/questions/612231/sql-select-rows-with-maxcolumn-value-distinct-by-another-column,http://stackoverflow.com/questions/71022/sql -max-of-multiple-columns,http://stackoverflow.com/questions/121387/sql-fetch-the-row-which-has-the-max-value-for-a-column,http:// stackoverflow .com/questions/1299556/sql-group-by-max,http://stackoverflow.com/questions/2109941/querying-for-a-unique-value-based-on-the-aggregate-of-another-value -while-groupin,http://stackoverflow.com/questions/723054/extra-fields-with-sql-min-group-by – outis 2010-03-08 09:33:56

回答

2

具有ID列,它是不是唯一的聲音「意外」,但是這一次應該讓你的預期行:

SELECT t.id, t.timestamp, MAX(t.marker) marker, 
     t2.lat, t2.lng 
FROM table t 
JOIN (
    SELECT id, MAX(timestamp) ts 
    FROM table 
    GROUP BY id 
) tx ON (tx.id = t.id AND tx.ts = t.timestamp) 
JOIN t2 ON (t2.id = tx.id) 
GROUP BY t.id, t.timestamp 

通過第二組將確保你只在情況得到一排有是相同的idtimestamp的更多記錄。

更新:編輯查詢加入t2

使用LEFT JOINid s的情況下t1不存在於t2中。那麼latlng對於那些行將是NULL

+0

太棒了!非常感謝您的回答。表中ID不唯一的原因是因爲我需要客戶端ID所有事務的所有條目。 我會在家測試一次您的查詢。如何將它加入到具有相同ID(但唯一)的第二個表table2中以獲取僅在第二個表中的lat和lng字段? 謝謝 – 2010-03-08 09:47:10

+0

@charo:編輯我的答案,從't2'添加列。 – 2010-03-08 10:10:32

+0

謝謝彼得,我願意在家裏測試它:) – 2010-03-08 10:36:31